Yes, for all purposes it's a separate filesystem, so although you're doing a move it acts like a copy on the same disk.
I know nothing about scripts, I can Google and take this or that that works for me, but the script I use is very crude, it works for me because I know its limitations, e.g., it assumes you already have two existing snapshots on the first run or it won't work correctly when deleting the older snapshot, still I don't mind posting it so it might give some ideas and good laugh for the forum member who do know how to make scripts.
I use the User Scripts plugin with two very similar scripts, one that runs on a schedule daily and takes a snapshot with the VMs running, and a very similar one I run manually usually once a week to take a snapshot with all the VMs shutdown, ideally if there's a problem I would restore to an offline snapshot but the online snapshots give more options in case I need something more recent.
#description=
#backgroundOnly=true
cd /mnt/cache
sd=$(echo VMs_Off* | awk '{print $1}')
ps=$(echo VMs_Off* | awk '{print $2}')
if [ "$ps" == "VMs_Offline_$(date '+%Y%m%d')" ]
then
echo "There's already a snapshot from today"
else
btrfs sub snap -r /mnt/cache/VMs /mnt/cache/VMs_Offline_$(date '+%Y%m%d')
sync
btrfs send -p /mnt/cache/$ps /mnt/cache/VMs_Offline_$(date '+%Y%m%d') | btrfs receive /mnt/disks/backup
if [[ $? -eq 0 ]]; then
/usr/local/emhttp/webGui/scripts/notify -i normal -s "Send/Receive complete"
btrfs sub del /mnt/cache/$sd
btrfs sub del /mnt/disks/backup/$sd
else
/usr/local/emhttp/webGui/scripts/notify -i warning -s "Send/Receive failed"
fi
fi