It’s certainly possible, but it’s not exactly supported so is slightly involved.
You’ll indeed want to transfer all the datasets to the new zpool, which the above will do fine.
Then you’ll need to remove that @migrate snapshot from the target so that it won’t confuse LXD. Then you should mark down all the mountpoint properties of the source datasets, then unset them all and set the original value on the target datasets.
Lastly you’ll need to do a tiny bit of DB surgery to have LXD look at the new place.
That bit depends on whether you’re on LXD 2.0.x (default on 16.04) or if you’re on 2.x (likely 2.21 if using backports).
In the former case, something like this should do the trick:
sudo sqlite3 /var/lib/lxd/lxd.db "UPDATE config SET value='POOL/DATASET' WHERE value='POOL';"
In the latter case, it’ll instead be:
sudo sqlite3 /var/lib/lxd/lxd.db "UPDATE storage_pools_config SET value='POOL/DATASET' WHERE value='POOL';"
Once that’s done, you can start LXD again and things should be fine.