FWIW, sync isn't likely going to work on those few models that have a subcpu (s2, s3, s80). I just tried my s80, remote works in non-sync mode but causes the camera to shut down when sync is enabled. On these cameras, the subcpu is responsible for sensing the state of USB power. The DIGIC gets that state by querying the subcpu.
The subcpu also controls main power, so it can switch off the DIGIC when it thinks it locked up (a form of watchdog).
Does using the remote hook with sleep work, for example, hooktest or chdkptp rsint -cont? In that case, it would suggest like the hard busy loop causes the problem, maybe because it blocks communication with the subcpu?
A couple thoughts if this is the case:
It would be nice to still have the remote hook implemented for scripts, but disable sync if it crashes.
I've recently thought about making sub 10ms "sleep" using HP timer and a semaphore or eventflag. Basically, just set the timer, wait for the object, timer call back triggers it. Of course, some other task could get scheduled and make the delay longer, but it seems like the normal case could be significantly better than 10ms. It would need to only be called from one task, or have a synchronization object for each.
If the subcpu triggers an interrupt on the main CPU when it sees USB, maybe we could hook that instead.