Yes. Actually I think we can do more in `ShipmentBundle` right? I think the processor  should live there, and be like: `ShipmentProcessor::updateShipmentState(ShipmentInterface $shipment)`. Or event better, act on a collection of shipments so that it's possible to ship all given shipments at once. Same with items `ShipmentProcessor:updateItemsState(array(ShipmentItemInterface))` (which is called from inside `updateShipmentState`!).

Then we have our listener in `CoreBundle`, that take an Order as event subject, and give `$order->getShipments()` to ShipmentProcessor. *Or*, even better again, it could dispatch a `ShipmentBundle` event and another listener in `ShipmentBundle` takes care of it. Then the listener in `CoreBundle` would have 1 role: dispatch the shipment event + `sylius.order.pre_ship` event. And finally, in another listener listening at `sylius.order.pre_ship` you can set the state of the order.

Hope it's clear enough :p