Sorry for the delay! I finally dug into this and reproduced it on Debian 13 and Ubuntu 24.04, and learned a Linux permissions detail I had never realized before!!
The zone transfer actually succeeds, but BIND then fails to set the file’s modification time to a specific value, because the file belongs to root.
What surprised me is that group write permission lets plain touch set the timestamps to now, but assigning an explicit date requires file ownership or CAP_FOWNER. I honestly didn’t know that!
Because BIND uses an explicit timestamp to track zone expiry, a failure in that operation also prevented it from being written to the disk, leaving behind the empty .hosts file created by Webmin, even though the transferred records are already in memory.
So, setting ownership to bind:bind fixes it. @Jamie, I’ve updated the Debian and Ubuntu default configs accordingly.
@Shirehosting, for existing installations, set Owner for zone files to bind:bind in the BIND module config, then manually change the ownership of the affected files to bind:bind as well.