- you have a non initialized collection (association between entities)
- you have loaded some entities that are in that collection and changed some fields (without flushing)
If you do a matching using a Criteria on the collection (http://docs.doctrine-project.org/en/latest/reference/working-with-associations.html#filtering-collections), then the Criteria will be executed through a DB query. But the fields you changed are not updated in the DB, so if you filter/order on those fields, then the result of the filter() will be incorrect.
However, if your collection was initialized, the Criteria matching will be done in memory on the ArrayCollection and the result will be correct.
So we have the problem for Criteria filtering on non-initialized collections.