It is correct to change unit_price of commerce_order_item programmatically under several conditions?
As a proof of concept a module with this functionality already exists. Unfortunately, it's not published yet because that requires a couple of final touches with a time frame allocated for this kind of work.

https://github.com/drugan/commerce_oiaddon

The price adjustment is taken from a pseudo-price field added to some entity type and then the order item price recalculated at the event of an order item added to or removed from a shopping cart. So I am not sure why you can't get the same result as in the commerce_oiaddon module. Just do the same as it shown in the example and it should work.