Well, interpret_in_new_env is doing what the name promises.
Unfortunately macro handling in interpreter is rather baroque,
interpreter distinguishes between "parser macros" which are
_not_ kept in environment and "interpreter macros" which
are mostly kept in environment. Few pre-build macros
are kept separately, but for some reason interpreter may
look in two environments, so there is some extra complication.
"parser macros" are kept in '$pfMacros', saving it we can
get behaviour that you expect for construct above. But
currently "parser macros" do not respect frames, so
they would still have different scope than other constructs.
I will look what can be done, probably we should turn all
macros into "interpreter macros".
--
Waldek Hebisch