Basically the problem I'm having is that it seems there never is an entry in the ChangeLog for a new reference. Why would this happen ? How do we determine if a reference needs to be stored ?
Well, it is ItemImpl.save() that checks for dirty references and that invokes LocalItemStateManager.store() for every one of them. The LocalItemStateManager itself stores them inside the ChangeLog after checking the validity. The local ChangeLog will later feed the shared ChangeLog inside SharedItemStateManager which ultimately hands them over to the PersistenceManager. Note, that you if make references to the version store you won't see NodeReferences inside the ChangeLog.
What did you try when you observed that new references are not stored in the ChangeLog?
Regards Dominique
