The hung-MCU problem? Turned out to be some weird issue with the UART and/or its (vendor-supplied) device driver. Now I'm detecting when UART reads fail with "receive busy" status, and de-initializing and re-initializing the UART at the driver level to clear the problem. It seems to be working.
There remain at least two significant problems with the demon on the Linux machine, but I may have just fixed one of them. Now I need to generate some fault conditions to see if the fix actually works.
Meanwhile, I'll run my test script overnight. Maybe this time I'll get zero errors, instead of many errors and various wedged MCUs.