Answer
Check what the schedule's "Execute" setting is configured to run as — switching it to Initiator (rather than a different execution identity) is worth trying first, since this specific error has been associated with the schedule not executing under the right identity rather than a genuine permission-set gap for the user in question.