That method is meant for last minute changes to the entity itself, e.g. field defaults etc. Not for setting related entities, because it's called from the queue persister, so the queues are already calculated.
If you want to do that, do the following.
Use an instance of the class ObjectGraphUtils which is in the ORMSupportClasses, and call the method DetermineActionQueues. (based on what you want to save: an entity or an entity collection).
It will calculate the complete insert/update queues for you.
Then, traverse this queue and simply call a method you added to the entity, in which you've placed the code you now have in the OnBeforeEntitySave.
In there you can add entities to the entity's collections.
After that, simply call the save method on the adapter, and as it in there will recalculcate the queues to save, it will also save the entities you added in the routine you called when you traversed the queues you calculated yourself.
Now, you can automate this as this is fragile. So you can derive a class from DataAccessAdapter and in there override SaveEntity(SaveEntity(IEntity2 entityToSave, bool refetchAfterSave, IPredicateExpression updateRestriction, bool recurse).
In that override, perform the objectgraphutils routine, and then simply call base.SaveEntity(SaveEntity(IEntity2 entityToSave, bool refetchAfterSave, IPredicateExpression updateRestriction, bool recurse).
Use the same route for SaveEntityCollection. As SaveEntity and SaveEntityCollection aren't called recursively anymore, this is straight forward.