What Brenden says. To speed this up even further, you can create a set of upgraded vanilla instances to finish your upgrades. I've seen this approach for longer, simplified upgrade paths.
Create a fresh 8.1 instance, upgrade it to 8.2 and keep it (name it finish81to82), then create second fresh 8.2 instance and upgrade it to v9 (name it finish82to90).
Then simplified steps would go, for your 8.1 DB:
1) Run SQL upgrade script 8.1>8.2 and connect it to finish81to82 instance, run this instance.
2) Run SQL upgrade script 8.2>9.0 and connect it to finish82to90 instance, run this instance.
3) Connect your upgraded DB to the 9.0 upgraded codebase.
You can tell that the finishing script (UpgradeProcedure.cs) did the final touches by checking Event Log, look for UPGRADE - FINISH event.