Edit: as someone noted in this thread, the issue is that the boot process at some point wants to mount the root filesystem from the loopback device in a way that is not possible with GRUB's loopback functionality. Note that PC-BSD was renamed to TrueOS and that they now offer USB images.
I'm not too familiar with BSD and I can't find anything about BSD in Arch's Multiboot USB drive article, however they have 3 ways in their GRUB article, at least one should work when adapted to loop-mounted devices:
Chainloading the embedded boot record
menuentry 'FreeBSD' {
insmod ufs2
set root='hd0,gpt4,bsd1'
chainloader +1
}
This seems to be simple and loading the appropriate filesystem module appears to be a good idea but but remember that on optical media there is ISO 9660 or UDF and there are no partitions to my knowledge but El Torito.
Running the traditional BSD 2nd stage loader
menuentry 'FreeBSD' {
insmod ufs2
set root='(hd0,4)'
kfreebsd /boot/loader
}
That's almost what you did just as a static configuration without calling search.
Loading the kernel directly
menuentry 'FreeBSD' {
insmod ufs2
set root='hd0,gpt4,bsd1'
## or 'hd0,msdos4,bsd1', if using an IBM-PC (MS-DOS) style partition table
kfreebsd /boot/kernel/kernel
kfreebsd_loadenv /boot/device.hints
set kFreeBSD.vfs.root.mountfrom=ufs:/dev/ada0s4a
set kFreeBSD.vfs.root.mountfrom.options=rw
}
That looks surprisingly complex. I just tarted downloading the PC-BSD 10.3 iso, hopefully I find some time playing with it to figure out how to make it work via UEFI or legacy in the next few days.