As an addition to our upgrade process on these 8.2 organizations(one of the db's upgraded all the way from CRM 4.0) with various of customizations done on them:
1. On the 8.2 DB's we have always needed to run the following SQL script on the DB prior to the upgrade to v9.0:
UPDATE Entity
SET IsOfflineInMobileClient = 1
WHERE ObjectTypeCode IN (953, 954) AND IsOfflineInMobileClient = 0
2. One of the organization kept failing to upgrade which was due to Full text search.
Solution is to disable Full text search via Settings - Administration - System Settings and wait 24h as there is a job run within that time.(confirmed via MS Support ticket)
You can probably force this via script as the FT search is manageable via SSMS.
3. If having issues with Updates 0.9 , like SalesPatch, the best approach is by commenting out the "salespatch" from the solutions.xml of the that update package(described as a workaround in other posts with issue to SalesPatch/MarketingPatch), Update the org without it and then try manually to import the solution e.g. salespatch via GUI on the faling org as this will give you the real issue(opposed to the Update wrapper logs).
In our case we found 2 organizations that in some way during their journey had modified "out of the box) security roles, Saleperson, Salesmanager e.g.
With the above method we could clearly see that these roles was the cause of why the SalesPatch failed to apply.
Our solution was to actually remove these roles in the source v8.2 source DB as the upgrade to v9.0.9.4 re-created them, and then the upgrade to Update 0.10 (U0.27 in our case) went without a problem.