CiviRules update interfering with another plugin?
Found the problem. This is a multisite setup, and only one site has the custom plugin installed. So my hacking the Mailing/Event/BAO/Unsubscribe.php made one of the sites fail when it reached the call to the function defined in the custom plugin—but it couldn't find the function.

I didn't realize that the cron error emails I was receiving were for a different site than the one I tested manually. Hence my confusion about success manually running the Fetch Bounces job, but errors when it ran via cron.

Regarding the proximate trigger/cause: since I was logged in and saw the prompt to do so, I upgraded CiviRules at the same time I sent a new mailing. The new mailing bounced to two addresses, which caused the Fetch Bounces job to attempt to process them. I mistakenly thought there were no emails awaiting bounce processing, because, again, I was looking at the bounce email account for the wrong site. That seemed to point to the CiviRules update having done something strange.

So CiviRules probably had nothing to do with it... But I am still slightly confused, because I'm pretty sure there were bounce emails needing processing even before my simultaneous CiviRules upgrade/sending a new mailing. Before that change, the Scheduled Jobs log for Fetch Bounces shows:


  Finished execution of Fetch Bounces with result: Failure, Error message: A fatal error was triggered: Could not connect to MailStore for return@ourdomain.org@mail.ourdomain.orgError message: An error occured while sending or recei (...)


And I wasn't receiving cron error emails to let me know it was failing. After the update/mailing send, the job log shows Start, but never any Finish entries. So it seems my core hack broke it a while ago, but that either the CiviRules update, or my sending a new mailing, changed the way in which it failed.

Anyway, I'm glad it's not bombarding me with error emails now, and that it's actually processing bounces. People who find this issue can enjoy my classic PEBKAC (Problem Exists Between Keyboard And Chair)!