Rocky,
There seems to be a bug with regards to edit level if you are using Managed fields (PropertyInfo) for your field declarations.
I have a project that has multiple objects with Children and some with Grandchildren. I kept getting Edit Level Mismatch in wierd places so I downloaded your rootChildGrandChild test app and my objects did not look like yours with regards to Edit Levels.
So I converted my app to use CSLA 2 style fields like the test app and everything worked fine. Then I converted your test app to managed fields and it yielded erroneous results like my app did previously.
From my small amount of slueth work it appears that UndoableBase propagates the call to the child collections on line 145
// this is a child object, cascade the call
if (!_bindingEdit || value is FieldManager.FieldDataManager)
((Core.IUndoableObject)value).CopyState(this.EditLevel + 1);
This only happens when using managed fields as the old style field declaration does not match the criteria.
But shouldnt the field manager be smart enough to propogate the child calls or not?
I hope I am clear enough, I can provide more detail if needed.
Ryan