Larry,
I can't find the posts I've done related to this, but here is my understanding.
In the designer file, in the InitializeComponent() method:
1. A new instance of BO1 is created and the pointer stored in your BO1 variable.
2. A new instance of BO2 is created and a pointer stored in your BO2 variable.
3. The ParentBusinessObject property of BO2 is set to BO1, or the pointer that is held in BO1 is stored in that property
During Form Load:
4. The translations happens from BO1 on parent form to BO1 on child form. I.e. the pointer that the BO1 variable holds is changed to point to the BO1 on form one. I believe that the translation will also handle updating the pointers used for binding, but it doesn't attempt to handle things like parent BO properties. I.e. the ParentBusinessObject of BO2 is still pointing to the BO1 that was created in InitializeComponent.
5. You then manually reset the ParentBusinessObject of BO2 to BO1 (which seems like you're repeating yourself, but the pointer stored by BO1 has changed).
Hope that is clear. My brain hurt for a bit until I got this figured out.