Just to follow up here... so after debugging today with Krista in support, it appears we solved the issue.
It began as one day when my schedule (that had been in place for months) was supposed to run, my unit went offline and would just sit there with red flashing light. If I rebooted a bunch of times, it would sometimes come back, but as soon as I started the schedule, it would go red again. The final time, it just stayed red flashing - never came back.
Rachio sent me a replacement under warranty. I hooked it up, ran a few manual zones - all appeared normal. Then this morning when my schedule was supposed to run, it just didn't, although it said it did.
@franz had Krista from support reach out to me and we did some debugging. Turns out I had a borderline solenoid (was showing 18 ohms of resistance when it should have been 45 or so). This was low enough to manifest as a short. A short will make the unit go offline, but it's supposed to come back and continue with the next zone. Apparently, rarely, instead of coming back, it will enter an infinite reconnect loop (green flashing light).
Replacing the solenoid (lucky I had one on hand) and rebooting fixed the issue! So in the end it was a combo of broken controller (red flashing forever), followed by the rare-but-happens infinite loop of the replacement controller all in response to the borderline solenoid.
Thanks to @franz and Krista from support for taking care of all of this on a Sunday. My next scheduled watering day is Tue.... fingers crossed!