I did some testings with adding /DTACK into the switching code (was actually on the STE but relevant here). The problem is with DTACK, is that for ROM access for example, the GLUE doesn't release DTACK until a few nanoseconds before address strobe goes low again on the next cycle, basically around S2. The problem here is, the CPU is running at high speeds, it can reread DTACK from the previous cycle and obviously cause a crash.
So I did a quick test and added DTACK into my speed switching code to see exactly what happens in waiting for DTACK to go high before allowing 32 MHz speeds..
I got 266% on ROM speed (should be 309%)
I added 1K pull up on DTACK, then got around 295% (give or take 5%) .. Still a fraction slow.. but only a few %...
So GLUE is what has DTACK almost low all the time... and main cause of crappy DTACK generation.
There could be something else with slow DTACK release which could account for a few % drop in speed somewhere.. but no idea what. It does seem a little odd that speed seems to vary now, it is like DTACK is not arriving at a constant speed causing around 5-10% variation in ROM access.. So this would be difficult to determine.
But really, in the case of the STFM, ROM decoding is done on the booster board anyway. So this rules out likely issues with DTACK. On the STE however, I use the GLUE logic for the decoding as it is fast enough for 32 MHz. Though it is likely this logic will have to be bypassed in order to create a proper DTACK signal.
But in any case, when thinking towards the 64 MHz, the DTACK issue could be a problem, but the least I have a easy solution for this and it is fixable at least

it is possible slowdown with this new code, could be compensated by the faster CPU anyway.. In that the CPU will start cycles twice as fast, and compensate the slowdown with using DTACK which delays a clock cycle.
Worst case currently is that a few percent is lost, but overall again should be higher with 64Mhz anyway, so it does not really matter much.