Seems like the custom post thing was a red herring.
I couldnt see anything obvious in the debug logs so I tried setting the cache timeout to zero and the scheduler to various very long times. I found that no matter what settings I chose for these, the cache-related cron job "watcher" and the wp_cache_gc job were still being created for much shorter periods than I had selected, and this seemed to correspond with my cache being emptied.
So I deleted the watcher cron job altogether (what does it do anyway?) and manually altered the cache_gc job to 3 years. So far my cache has stayed full and it is being rebuilt according to the preload setting (24 hours) that I selected. Fingers crossed.
One other thing I dont understand: why do I need legacy caching and these checks for emptying it? Cant it just be completely turned off if I'm using Supercache?
It seems to me that a couple of tick-boxes in the advanced settings page to deactivate both unwanted services would be easier to understand than the "cache timeout set to zero", and the timer and schedule boxes that currently cant be turned off.