Instead of preallocation (which I guess require manual tuning) FreeBSD implements mechanism to cache kernel memory allocations for things like these network buffers, which I suppose solved this well enough for typical server usage when this networking code was written. But here likely the problem is that ZFS uses so huge amount of kernel space memory allocations as nothing done before, and so it wipes those caches too quick to keep them efficient.
It is not my closest area of the kernel last time, but I'd blame the NIC hardware or driver using contiguous physical memory allocation for receive buffers, while doing perfectly fine with mbuf chain on transmit path. I don't know whether this hardware can work differently, but it would be nice from its side. As I have mentioned on the ticket, I don't see how the newly rewritten Intel 1G NIC driver in FreeBSD HEAD branch handles it, but I can't find the old cluster allocation code there any more, so hopefully this is going to improve in this specific case.