This isn't quite a regression - it's yet another visible failure mode instead of silent failure.
Rolling back to one change prior to mine, here is the output for your example:
'```(,',',plet/fast ,',kernel ,@body) ; input
``,',',PLET/FAST ; output
a slightly reduced example also drops its tail in the older code and crashes in the newer code.
'```(,,body ,',',foo) ; input
``,,BODY ; output
I'll look into it. Btw CMUCL get these right, and CLISP gets these examples right by a much simpler approach that backquoted forms retain their abstract syntax tree as read. Maybe we should do the same. I don't see why internalizing the expression and inverting it with extremely obfuscated code is any better than just having the readmacro wrap the whole form as read in a real macro, like (backquote (backquote (backquote (list (comma ...))))) instead of having to reverse-engineer (backq-list* ...)