Why do you have prev? As far as I can see, it’s off by 1 render step because of it. prev gets set after WorldToScreenPoint gets assigned to view which is being used to position the frame.
Then I would use Heartbeat or BindToRenderStep to take previous CFrame. They are closer to RenderStepped than one more render step which shall be more precise.
I already had a feeling that this wouldn’t work but I tried it anyways incase I was wrong. Although the choppy-ness became less choppy but still didn’t fix it.
You could probably tween the position every frame. This works since tweens can override each other therefore it will tween faster as the desired distance is further.