On a pruned node, dumptxoutset with rollback checks that the blocks it needs haven't been pruned by calling GetFirstBlock(*current_tip, BLOCK_HAVE_MASK) (blockchain.cpp:3194). GetFirstBlock asserts that the block it starts from has both block and undo data (blockstorage.cpp:638).
Right after loadtxoutset, the active tip is the snapshot base block, and that has neither until it's downloaded. So on a -prune node:
loadtxoutset <snapshot>
dumptxoutset <path> rollback=<height>
aborts bitcoind:
Assertion failed: ((last_block->nStatus & status_mask) == status_mask), function GetFirstBlock, file blockstorage.cpp, line 638.
The GetPruneHeight helper already guards against a tip without data (blockchain.cpp:934), this call site doesn't.
This returns an RPC error ("Could not roll back to requested height since block data for the current tip is not available.") when the tip itself has no data, before calling GetFirstBlock. The check runs for every node, not only in prune mode: without -prune the same scenario doesn't abort, but it would otherwise copy the whole UTXO set into a temporary database before failing with an internal error. The existing "already pruned" error is still returned when GetFirstBlock finds a gap.
The test goes in feature_assumeutxo.py: right after the snapshot is loaded on the pruned node (node 1), and again on the non-pruned node 2, dumptxoutset with a rollback to the start height must return that error. On master the pruned node aborts and the RPC connection drops (RemoteDisconnected). With the fix feature_assumeutxo.py and rpc_dumptxoutset.py pass.