Trying this out, there are a couple of problems.
One is the general problem I've mentioned before, of when you try to incorporate additional code with a loop's body...of the binding of the variables vs. the names of the constructs you're adding in, summarized here:
Compatibility MAP-EACH and problems therewith
The other problem is that MAP-EACH as written currently always returns a BLOCK!. (This now reminds me of why REMOVE-EACH's implementation was such a pain and not written in terms of MAP-EACH in the first place.)
So... this needs some deeper thinking. :-/