We were never able to improve the efficiency of the code using XslCompiledTransform.
We were able to identify loops within the XSLT that were running many times, and when removed the code went from taking 60+ seconds to less than 1 second.
However, the XSLT was out of my control and so I needed to find an alternative solution. It was not ideal, but I had to go back to the obsolete XslTransform.
Using XslTransform the code runs in less than 1 second, which is what I need.
Going forward the XSLT we use will need to be sorted out, but for now using obsolete code is the solution to my problem.