Workflow was actually running correctly. Customer was filtering run history by local timezone and the UTC schedule fire time fell on the previous day in their local time. No bug — confirmed run executed as expected. Educated customer that all schedules are UTC and DST is not handled.