Actually the change of shipments state should be done in ShipmentListener (`sylius.listener.order_shipping`), create a new method there and make it listen to `pre_release`.
And you don't need to update Order states (paymentState and shippingState) as it's done by the StateResolver listener.