With build 40 it seems to be OK, both with me test CRAZY.BTM and with the original number-cruncher with DO loops nested 9 deep. Perhaps I could get it to misbehave if I went back to @EXEC[GOSUB] but I've learned my lesson. :-)
If crazy.btm is working in build 40, then the problem is with the rtl (the throw isn't being reliably executed). Still can't reproduce it here, but if the hack works for you then I'm not going to worry about it for now.
I added another kludge for DO to check the file read pointer while inside the DO loops, and abort if it's been set to the end. Not really an ideal solution, but easier than trying to explain to people why a QUIT won't actually terminate a loop.