Hey Daniel. Yes, this has happened in the past as an artifact of how VizAlerts uses the Tableau Server scheduling data to determine when to run. It's been a long time since I've looked at that portion of the code, but let me look into it and see if I can figure out what we can do to avoid it, because I think there's a better approach that we can take.
You can manually avoid it in two ways. First, as you mentioned, you can remove all the VizAlert subscriptions you want to switch to a different schedule, wait a few minutes to ensure VizAlerts removes them from it's state file, then re-assign them. Alternatively, you can stop the VizAlerts scheduled task, clear out the ops\vizalerts.state file completely, save it, move the alerts to their new schedule, then resume the scheduled task.