It missed steps for me if I tried going faster than 10mm/s on the Z. After I changed the stepping from 1/32 to 1/8 I was able to do 15mm/s, but there were points where like the OP it seemed to have more trouble turning the allthread and at those points it would start going slower. I then adjusted the acceleration, and by easing into and out of the 15mm/s it seems to have a balance between being faster (accelerating at 5mm/s which was the previous max feedrate) and still being accurate.
In Marlin you’ll see something like this:
#define MAX_STEP_FREQUENCY 40000
So at 1/32 microstepping and over 4000 steps per mm on the Z, trying to go over 10mm/s starts dropping steps (I believe it’s just suppose to slow things down, but Marlin seems to drop steps completely instead – although a dev posted here that it was fixed in the dev branch). By changing to 1/8 that dropped it down to 1133.86 steps per mm bypassing that 40,000 limitation.
I’ve seen that you are against limit switches elsewhere, but never why. Are you afraid of false triggering? I was planning on adding some purely for homing. I figure if I get a new wasteboard, add limit switches right at my maximums, then drill into the wasteboard every 100mm, I could line my pieces up right along the drilled holes, use threaded inserts to clamp the piece down, then at the start of my postprocessor have it do a G0 X100 Y100, G92 X0 Y0 and have a setup that after changing end mill bits would go back to the same exact spot every time. Would that work or is there something I missed there with that idea?