Hi Dan,
I think your MPG code might be caught in a MoveExp() motion forever. An Exponential Move to a target will never complete. It will just keep driving gradually closer and closer to the Target. This motion will conflict with any other motion commands that are given to the axis. After the Operator stops jogging either after a certain amount of time or when the destination gets very close to the Target then a single normal Move should be made to the Target to terminate any motion. I don't see your code doing that. You might look at the MPGSmooth.c as an example.
HTH
Regards