First, I looked at the interpolated and raw signals in HalScope. As expected, one had jaggies and one didn't. In my INI file, I changed:
net spindle-position encoder.0.position => spindle.0.revs
To:
net spindle-position encoder.0.position-interpolated => spindle.0.revs
I ran the threading program at 200 RPM:
Jaggies gone, plus initial slope change before threading now a straight line. However, there's a break in the velocity midway on the line that was not there before. Still have the odd saw-tooth velocity while threading. (Note: I was running the program without a tool, so no actual threading took place)
I thought this might have fixed the problem. So I made another 8TPI thread at 100 and 200 RPM. Alas, they did not overlay. Same problem. In case you're wondering, I could not find another piece of 1" stock, so I used a 1/2" rod.
PS. Looks like I need to resharpen the cutter! Easy to see in the closeup.