MariaDB 10.0.24 & PHP 5.6.20
Create an order (any way you want)
Check DB for serialized field product_options in table sales_order_item
Field product_options of the Magento\Sales\Model\Order\Item model should be unserialized on collection load (before it's serialized again when saving the model)
Field product_options is re-serialized as string (see screenshot below)

As you can see in the screenshot some of the item's product_options field is re-serialized into a string when the item is loaded through the collection and not through the model.
This happens every time I interact on an order after creation (credit memo, cancel, etc...).
I've noticed this after getting error when using $item->getBuyRequest().
After investigating I've noticed the items were loaded through the collection therefore not going through the $this->unserializeFields($object); from the ResourceModel's load function.
When creating the credit memo, it goes through the order's item to set the amount refunded and saves the item.
The save function of the ResourceModel automatically serialize the $_serializableFields creating this thousand character long entry as shown in the screenshot above.
Hi @LTC-fperrin!
In Magento 2 we created service layer for the most common entities. We imply you use repositories to work with products, attributes, orders, invoices, etc. You may find repositories and data models in "Api" folder of each module.
To check OrderItemRepositoryInterface works properly i sent GET request to /rest/V1/orders/items?searchCriteria[filter_groups][0][filters][0][field]=order_id& searchCriteria[filter_groups][0][filters][0][value]=4 where 4 is my order id. This request returned unserialized product options:
<product_option>
<extension_attributes>
<configurable_item_options>
<item>
<option_id>135</option_id>
<option_value>4</option_value>
</item>
<item>
<option_id>136</option_id>
<option_value>6</option_value>
</item>
</configurable_item_options>
</extension_attributes>
</product_option>
Nevertheless the behavior you described is a bug. We created internal issue MAGETWO-58305. Thank you for reporting.
@LTC-fperrin, thank you for your report.
We've created internal ticket(s) MAGETWO-58305 to track progress on the issue.
Hello,
Since the format of the product options have been changed (serialized to json) it would be great if you could think about this bug in the conversion script Magento\Sales\Setup\SerializedDataConverter::convert($value).
When I upgraded to Magento 2.2, the convertion from serialized to json went ok except for those doubly serialized entries. In those cases, the JSON object had a single string of PHP serialized data :/
Regards,
The issue had been fixed in 2.2.2
Most helpful comment
Hello,
Since the format of the product options have been changed (serialized to json) it would be great if you could think about this bug in the conversion script
Magento\Sales\Setup\SerializedDataConverter::convert($value).When I upgraded to Magento 2.2, the convertion from serialized to json went ok except for those doubly serialized entries. In those cases, the JSON object had a single string of PHP serialized data :/
Regards,