zfs rename/move root filesystem into child
Solution 1:
Given the problem documented by @USDMatt, ZFS send/receive is probably the best way to go.
zfs snapshot tank@snap
zfs send tank@snap | zfs receive tank/anotherfs
zfs set mountpoint=/beep/boop tank/anotherfs
rm -rf /tank/*
zfs destroy tank@snap
Watch out when running the rm -rf if you don't change the mount point of if you have other filesystems in your tank zpool. You don't want to recursively remove the contents of the new filesystem (/tank/newname) or any other child filesystems (/tank/*) accidentally.
Solution 2:
(see notes in comments, this works, but you'll never be able to delete initial the snapshot, so it's not a good solution)
With ZFS this is surprisingly straightforward: just snapshot, clone and then rm. No extra space or copy time required.
zfs snapshot tank@mydata
zfs clone tank@mydata tank/newname
zfs set mountpoint=/beep/boop tank/newname
rm -rf /tank/*
Watch out when running the rm -rf if you don't change the mount point of if you have other filesystems in your zpool. You don't want to recursively remove the contents of the new filesystem (/tank/newname) or any other child filesystems (tank/*) accidentally. Once you've confirmed your files are not in the root fs (/tank/) and only in your new filesystem, you can also delete that initial snapshot.
zfs delete tank@mydata
Solution 3:
I don't think there's a simple elegant way... although you could just change your mountpoint...
mkdir /tank
zfs set mountpoint=/tank/mydata <possibly renamed tank set>
Or maybe rename tank and then mount it where you need it...
Either that, or create a filesystem in the right place and cp, mv, or zfs send/receive...