The counter is unreliable coz the @ forces ofp to wait for the camera; no way to predict how many msecs that costs. Also the ~0.1 is not good because ofp will not really wait for 0.1 seconds, it will run the next loop cycle when its *close to 0.1 seconds later AND it is convenient for the engine to do some script execution*. That means: If the engine is too busy doing other stuff, it will neglect the script and the 0.1 delay will get bigger in reality.
Here's a stable solution:
_cam = "camera" CamCreate [0,0,0]
_cam CameraEffect ["internal","back"]
_endTime=TIME+20
#loop
_cam camsettarget man
_cam camsetrelpos [0,50,50]
_cam camcommit 0.03
@camcommitted _cam
_cam = _cam + 0.0020
?TIME<_endTime:goto "loop"
_cam camsettarget man2
_cam camsetrelpos [23,0,56]
_cam camcommit 0
@camcommitted _cam