Hi Tom,
It's possible I'm misunderstanding what you're saying. The definition tailRecM1, while it typechecks, will not always operate in constant stack space (at least in PureScript). The paper "Stack Safety for Free" provides a pretty much analogous definition by way of illustration and says as much about it.
As for tailRecM2, unfortunately this precludes many useful and nontrivial MonadRec instances such as Effect and Aff, which admit no such distributing natural transformation (if this is what you actually meant for the first argument to be).
Thanks,
Asad