/usr/src updates always take extremely long when done via freebsd-update
as it patches *every* *single* *file* *at* *once* in there. Especially on spinning rust which can only handle abysmally low IOPS, this will take forever.
The solution is simple: don't update /usr/src that way. Nuke it, update the system/jail and re-populate the sources via git or tarball (thats *if* you actually need the sources).
I have no idea if/how iocage can do it (best guess: it can't - they removed a lot of useful features from it when botching it together in python...), in iocell you can simply remove 'src.txz' from the 'ftpfiles' option, run the update and then re-populate /usr/src and add 'src.txz' to 'ftpfiles' (for the sake of correctness). For basejails this isn't necessary as they don't have those files in their dataset (unless you have done something weird to them).
In general: major release updates for basejails *can* also take a while (I often see 3-5 minutes on slower hosts until etcmerge starts). I usually see that the first jail takes rather long (with zfs doing a lot of work), the following ones are a lot quicker - I suspect this boils down to zfs having everything in ARC, so all zfs-related operations are faster by magnitudes. Merging etc can still take a while, depending on how much additional stuff there is installed in the jail.
regarding that truenas link: they are doing so much weird stuff with their system and deviate a lot from common practices (and sense) in many places, I'm not surprised they have weird behaviour on upgrades. Also they are lagging (hopelessly) behind, usually using EOL OS versions, so this abomination is in no way any source of viable information regarding FreeBSD...