I broke replication. Could this have been fixed?
Because you ran the mysql_upgrade on both master and slave, the ALTER TABLE was happening twice on slave side. The changes on master was propagated to slave, trying to add columns which you already added with manual mysql_upgrade.

I don't think reset slave has anything to with the problem, unless you were looking to skip the entire block of statements done by mysql_upgrade, which IMO is very dangerous.