I'm in the middle of an upgrade to AEM 6.0sp2 from CQ5.5 and I thought it would be beneficial to other users to be aware of pain points that we encountered.
So far the interesting ones have been:
Jetty works differently
one example: request.getPathInfo() instead of request.getPathTranslated()
Filter priority was 'reversed'
prior to a fix. Sling had inadvertently placed the filters in the wrong priority. The fixing of this bug broke multiple pieces of functionality
Oak is stricter
We had a complex scenario where jcr:content nodes had been created with a jcr:primaryType of 'nt:unstructured'(product issue) and then had gotten into a state where it did not have the 'mix:versionable' mixin but had the properties associated with that mixin. Still trying to sort that mess out. But migration of content in that state just fails.