If I have a pool on one disk how do I create a new pool on another disk and copy over the contents?
Page 55 of FreeBSD Mastery: ZFS has a very simple set of commands that show you how to create a new zpool on a partition.
Chapters 0 through 3 have very good explainations of the different terminology used in ZFS (things like VDEV, SLOG, ZIL, pool, dataset)
You can also create a zpool using a "whole device" (the way Solaris/Illumos does)
A common recomendation is to use labels because labels are consistent but device numbering may not be.
Assume your new device shows up as /dev/da37, you are dedicating the whole thing to a zpool, here is how I would do it (obviously all commands done as root from a terminal window or console):
First create partitions and gpt label:
gpart create -s gpt da37
gpart add -a 1m -l myzfsthing -t freebsd-zfs da37
Now create the new zpool:
zpool create datastuff gpt/myzfsthing
Now you have a new zpool named "datastuff" on the gpt partition labelled "myzfsthing"
zpool list should show the new pool "datastuff" and it's vdev "gpt/myzfsthing"
zpools are interesting but datasets on them are more interesting.
To create a new dataset on zpool datastuff:
zfs create datastuff/myfirstdataset
zfs list should now show that.
As for copying there are about a million different ways to do that, depending on what exactly you are trying to accomplish.
zfs send zfs receive is one way (there are probably half a billion examples doing a google search)
tar czvf | tar xzvf is another
standard cp -r
Honestly there are lots of references for doing zfs basics around, a bunch on this forum, a bunch over at klara systems, heck even the old Solaris/Oracle ones can be useful.