But! Speaking of noise... here's a question which I'm embarrassed not to've mentioned sooner...
Have you tried adding pullup resistors on the data bus? The inputs (including the data bus) of WDC CPUs are not TTL compatible. In common practice, many hobbyists ignore this, and they (usually) get away with it because TTL-specced memories exceed their spec sufficiently that the system works anyway (albeit with reduced noise immunity). But you, Adrian, have perhaps not been so lucky... and your symptoms are consistent with a noise problem. Try adding eight pullup resistors, say 3.3k or 2.2k or even 1.5k.
Alternatively, is there any chance of replacing the WDC CPU with an older chip with slower rise/fall times such as a Rockwell R65C02? (It's also possible a slower RAM would help, but I suspect the WDC CPU is the noisiest rise/fall time offender.) Moreover, the inputs of Rockwell 65C02s (and most/all? other non-WDC 65C02s) are TTL compatible.
[Edits.]
-- Jeff