Actually I wonder if the caches need considering. Perhaps the active code in the kernel and the memtester can all fit inside a cache, so when you're testing that configuration, you're not actually hitting the ram at all. Once you have a kernel with all kinds of modules inserted, some of those will probably need to live off cache, and it'll need to refill the cache from ram. If that's going awry, perhaps because of RAM timings, or something esoteric in the MMU config, it could be hard for the kernel to report before hitting a duff instruction, and especially if the exception table is out of cache at present, it could have trouble bringing that back in from RAM. I don't know off hand if zero page (where the exception vector tables are normally stored) is protected in some way.