OP, more information is needed: does this failure mode only happen for (zfs) root file systems? If so, spell it out please.
I do not know how I could give you a satisfiable answer to your question except posting comprehensive information about the system, which caused the trouble:
FreeBSD 12.1-RELEASE-p9 GENERIC
# gpart list
Geom name: ada0
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 468862087
first: 40
entries: 128
scheme: GPT
Providers:
1. Name: ada0p1
Mediasize: 209715200 (200M)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 20480
Mode: r0w0e0
efimedia: HD(1,GPT,7460c9ec-5290-11ea-b2d2-f44d306e2eaf,0x28,0x64000)
rawuuid: 7460c9ec-5290-11ea-b2d2-f44d306e2eaf
rawtype: c12a7328-f81f-11d2-ba4b-00a0c93ec93b
label: efiboot0
length: 209715200
offset: 20480
type: efi
index: 1
end: 409639
start: 40
2. Name: ada0p2
Mediasize: 239846031360 (223G)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 210763776
Mode: r1w1e1
efimedia: HD(2,GPT,7466e1c1-5290-11ea-b2d2-f44d306e2eaf,0x64800,0x1bebf800)
rawuuid: 7466e1c1-5290-11ea-b2d2-f44d306e2eaf
rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
label: zfs0
length: 239846031360
offset: 210763776
type: freebsd-zfs
index: 2
end: 468860927
start: 411648
Consumers:
1. Name: ada0
Mediasize: 240057409536 (224G)
Sectorsize: 512
Mode: r1w1e2
Geom name: ada1
modified: false
state: OK
fwheads: 16
fwsectors: 63
last: 351651847
first: 40
entries: 128
scheme: GPT
Providers:
1. Name: ada1p1
Mediasize: 209715200 (200M)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 20480
Mode: r0w0e0
efimedia: HD(1,GPT,746fa745-5290-11ea-b2d2-f44d306e2eaf,0x28,0x64000)
rawuuid: 746fa745-5290-11ea-b2d2-f44d306e2eaf
rawtype: c12a7328-f81f-11d2-ba4b-00a0c93ec93b
label: efiboot1
length: 209715200
offset: 20480
type: efi
index: 1
end: 409639
start: 40
2. Name: ada1p2
Mediasize: 179834978304 (167G)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 210763776
Mode: r1w1e1
efimedia: HD(2,GPT,74759f89-5290-11ea-b2d2-f44d306e2eaf,0x64800,0x14ef8000)
rawuuid: 74759f89-5290-11ea-b2d2-f44d306e2eaf
rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b
label: zfs1
length: 179834978304
offset: 210763776
type: freebsd-zfs
index: 2
end: 351651839
start: 411648
Consumers:
1. Name: ada1
Mediasize: 180045766656 (168G)
Sectorsize: 512
Mode: r1w1e2
# geli list
Geom name: ada0p2.eli
State: ACTIVE
EncryptionAlgorithm: AES-XTS
KeyLength: 256
Crypto: hardware
Version: 7
UsedKey: 0
Flags: BOOT, GELIBOOT
KeysAllocated: 56
KeysTotal: 56
Providers:
1. Name: ada0p2.eli
Mediasize: 239846027264 (223G)
Sectorsize: 4096
Mode: r1w1e1
Consumers:
1. Name: ada0p2
Mediasize: 239846031360 (223G)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 210763776
Mode: r1w1e1
Geom name: ada1p2.eli
State: ACTIVE
EncryptionAlgorithm: AES-XTS
KeyLength: 256
Crypto: hardware
Version: 7
UsedKey: 0
Flags: BOOT, GELIBOOT
KeysAllocated: 42
KeysTotal: 42
Providers:
1. Name: ada1p2.eli
Mediasize: 179834974208 (167G)
Sectorsize: 4096
Mode: r1w1e1
Consumers:
1. Name: ada1p2
Mediasize: 179834978304 (167G)
Sectorsize: 512
Stripesize: 0
Stripeoffset: 210763776
Mode: r1w1e1
# zpool list (of course after deleting the snaps)
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
zroot 167G 109G 58,1G - - 51% 65% 1.00x ONLINE -
# zfs list -t all (This shows around 1300 snaps. I doubt details this will matter here?)
NAME USED AVAIL REFER MOUNTPOINT
zroot 109G 52,9G 88K /zroot
zroot@2020_10_01 0 - 88K -
zroot@2020_10_10 0 - 88K -
zroot@2020_10_19 0 - 88K -
zroot@2020_10_20 0 - 88K -
zroot@2020_10_21 0 - 88K -
zroot@2020_10_22 0 - 88K -
zroot@2020_10_23 0 - 88K -
zroot@2020_10_24 0 - 88K -
zroot@2020_10_25 0 - 88K -
zroot@2020_10_26 0 - 88K -
zroot@2020_10_27 0 - 88K -
zroot@2020_10_28 0 - 88K -
zroot@2020_10_29 0 - 88K -
zroot@2020_10_30 0 - 88K -
zroot@2020_10_31 0 - 88K -
zroot@2020_11_01 0 - 88K -
zroot@2020_11_02 0 - 88K -
zroot@2020_11_03 0 - 88K -
zroot@2020_11_04 0 - 88K -
zroot@2020_11_05 0 - 88K -
zroot@2020_11_06 0 - 88K -
...
# zfs get -t filesystem reservation
NAME PROPERTY VALUE SOURCE
zroot reservation none default
zroot/ROOT reservation none default
zroot/ROOT/default reservation none default
zroot/tmp reservation none default
zroot/usr reservation none default
zroot/usr/home reservation none default
zroot/usr/ports reservation none default
zroot/usr/src reservation none default
zroot/var reservation none default
zroot/var/audit reservation none default
zroot/var/crash reservation none default
zroot/var/log reservation none default
zroot/var/mail reservation none default
zroot/var/tmp reservation none default
Of course it would be awesome if this was some behaviour, which can be changed so it won't happen again to anyone.