For convenience I'll cross-post the updated problem and workaround, to hopefully save time for others who've wasted hours on this problem:
With Multiple C1DataSet objects on a form in VS 2005, the BindingContext becomes corrupted ... If you then comment out the initialization line for the working dataset (ex: "this.c1DataSet1.BindingContextCtrl = this;") you will find the PositionChanged event now works for dataset 2 but of course stops working for dataset 1. The components and the designer never create properly working code ... The following workaround is the only way I've found that it works, providing proper PositionChanged event firing for both datasets:
Workaround
Step 1) In the form, manually declare and create separate BindingContext objects:
BindingContext bcG1 = new BindingContext();
BindingContext bcG2 = new BindingContext();
Step 2) After the InitializeComponent method in the form's constructor, manually assign all data aware components to their respective binding contexts (on a complex form .. yeesh this is annoying and prone to maintenance hassles).
c1TrueDBGrid1.BindingContext = bcG1;
c1TrueDBGrid2.BindingContext = bcG2;
c1DataSet1.BindingContext = bcG1;
c1DataSet2.BindingContext = bcG2;
Additional Observations
I believe other events such as CurrentRowChanged are affected by this as well (and corrected with the workaround), though I've focused my testing on the PositionChanged event.
Could not produce a solution using BindingSource objects, in this case none of the BindingSource objects fired their PositionChanged events though the components allow linking through to the DataSet and DataMember within the designer, and data shows up at runtime. Searching the DataObjects help file for "BindingSource" or "BindingContext" gives 0 results. I'm really surprised this has not been documented nor tested (or should show in Release notes as a known issue).