I believe when you use the createCriteria() or with{AssociationName}(), a new criteria is created and is rooted at the associated entity. So when you stack like you have in your example, the second with{AssociationName}() expects to begin from the context of currently rooted entity, which in this case will be OrderStatus. In essence, it’s trying to associate CustomerShippingMethod with OrderStatus, even though both of them are associated at the Order entity.
If you use createAlias(), you should be able to accomplish what you’re after. Something like: