Under Debian mysql_upgrade is launched by /etc/mysql/debian-start script, who is called after each server start. So, at least under Debian, mysql_upgrade is run without --skip-grants-tables option.
Under Debian mysql_upgrade is launched by /etc/mysql/ debian- start script, who is called after each server start. grants- tables option.
So, at least under Debian, mysql_upgrade is run without --skip-