This is potentially a tricky one to contend with, and I'm wary of how exactly automated this should be - even with all the safeguards normally put in place in the plugin manager.
What I would probably have the upgrader do is disable all plugins (going through the same steps as DisablePlugin() does), and then let the admin re-enable them afterwards - especially since a plugin may no longer function if it depends on a hook that is subsequently altered (e.g. we change its signature, so we should rename it to enforce authors version check properly)
What I would probably have the upgrader do is disable all plugins (going through the same steps as DisablePlugin() does), and then let the admin re-enable them afterwards - especially since a plugin may no longer function if it depends on a hook that is subsequently altered (e.g. we change its signature, so we should rename it to enforce authors version check properly)