I'll go back now to working on my benchmarking project which I hope someday will make it easy to see if that 'volatile' causes measurable harm to performance. I'll also keep using 'eval-region' and 'eval-buffer' while I have threads running byte-compiled functions which get redefined by doing that, and report back here if I encounter this bug again.