I think what happens is, the smoother passes over every waypoint and modifies the positions enough that it does not end exactly at the final desired position. It "can't catch up."
Possible solution:
While iterating and stretching the trajectory, I think we should also check if the final waypoint matches the target. Keep stretching until it does.
Easy to reproduce if velocity_scaling is set very high, acceleration_scaling is set very low.