It looks as if I have solved the problem. I isolated it by moving my breakpoint up and down one line at a time (not the most elegant solution, I admit). The offending line was:
Set pEnumSplitPoint = pPolyCurve.SplitAtDistances(1, dblMidPoint, True, False)
I had acquired this bit of code online somewhere, either from a forum post or a documentation sample, but in either case, it turned out to be faulty. The 3rd argument (asRatios) should have been False. I spent an entire day fruitlessly trying to find out what asRatios means. Does anyone know?