After last night's little "accidental" drinky-fest, I re-examined the problem this afternoon, and it was clear what I was doing wrong. Part of it was something I missed during the code translation (VB .NET 1.x to C# 2.0). Part of it was also a very subtle bug/issues (depending on your viewpoint ;) ) in the original code base. I've isolated it and tested the algorithm to get it to work that makes the most sense to me, and now all is well. I'll roll the correct code in later tonight.

Having one glass of wine during a coding session is good. Any more than that and I should just give up and finish off the bottle!