Main reasons for Entities crossing each others or crossing borders:
Motion Behavior + Navigation Behavior = FAIL
The Navigation Behavior influence the position of your character particle.
When playing a Motion Behavior, it will also directly influence the position of the character particle, hence breaking the navigation avoidance computer before.
Locomotion Behavior is designed to follow the position of the character particle without modifying it. Therefore to play a motion influence the character root node position while using a Navigation Behavior, you should always use Locomotion Behavior.
Note: if you want to play a motion e.g. only on the arms of your character (for example saying hello motion), then it is perfectly fine to use a Motion Behavior because it will not influence the character root position
Locomotion cannot follow Navigation
If you do not provide the right motions to the Locomotion Behavior, it may be unable to follow Navigation (e.g. Navigation speed is set to 5m/s and your Locomotion only has walk motions so it cannot go faster than 1.4 m/s). If this happen, your character may be very far from its particle and the avoidance broken.
See the Locomotion FAQ for full details
Entities have no Navigation Behavior running
Entities without a Navigation Behavior will not be avoided by Entities with a Navigation Behavior
If two different entityTypes are passing through each others you should check if a Navigation Behavior is applied to all your entities.
To quickly check if your characters are playing a Navigation Behavior or not: Just click on one of your characters and look inside the Crowd Visual Feedback.