Lewis,
Try using nested loops instead of GetFirst(). The GetFirst() behavior can be unpredictable, especially with Business Objects that can change over time.
I'd suggest swapping and GetFirst() with an embedded "ForEach", then using Trace commands to display the Values you're interested as it goes through the nested loops. You can use the SDK in Debug Mode to monitor the Trace output.