Nonetheless, can you try vid_get_viewport_live_fb for nice clean undistorted motion anyway? I'll test it out here.
I don't currently have time. (edit: probably through the next week at least)
because CHDKPTP's own frame rate does not change
Note that the FPS avg displayed in CHDK is currently a lifetime average (total time/total frames) since the live view was activated, so it's not very useful. You can reset it by toggling the live view on and off. The xfer last ms, xfer last kb/s and frame last ms are probably more useful. Note the frame last is the drawing time only, it doesn't include transfer.
Your transfer rate seems a bit low for a modern camera. On my D10 (older than S90), I get from 14 to 21 mb/s, your screenshot shows 11. It's very unlikely this is something chdk or chdkptp could change, but it might have to do with your USB setup. If there's other devices on the same USB controller, you might try moving them.
edit:
If I turn off UI overlay, I still see tearing but it is not as severe.
This shouldn't really have much effect, although the tearing may be slightly less obvious at higher frame rates. All I was trying to say is that the 62ms transfer time includes both the UI and viewport.
Without vid_get_viewport_live_fb, you are only effectively getting 10fps anyway, since the buffer it returns will only change for every 3rd canon frame. Implementing it won't prevent tearing, but it will probably make it less obvious.