The problem has nothing to do with env depths, just with cut/past of empty paragraphs. The problem is that Text::acceptChanges on the internal cut/paste paragraph list calls DEPM and this removes an empty paragraph at the beginning.
The fix is to move the bulk of acceptChanges to paragraph_funcs (where it belongs IMO) and the version in Text just calls that and then DEPM, while in cap we just call the plain version. I think this is the right thing to do, but on a first test this uncovers a DEPM bug :-O ... A/