Sorry this keeps happening; I know it’s frustrating.
whitenoise suggestion to binary search your plugins is a good one.
I know you’ve eliminated your backup script to your satisfaction, but it might be worth trying to run without that as well.
Running lsof | grep Path/To/vault and log the results periodically with a little bash script might be good to try as well. I know you think there are no other processes using your vault files, but it would be good to verify.
Where is the logic in whatever routine sees a 2.14 KB file suddenly become 0 bytes and decide “yeah that must be right, let’s keep the 0 byte version”. Without any notice/log/user confirmation? It makes no sense to me.
Maybe you are not sharing your vault via Dropbox or another Sync service, but what you are describing is not an error case in general. I share my vault among multiple devices and if I zeroed out a file on my laptop, I’d expect that to be reflected on my iPad too without a nag screen.
It’s overwhelmingly likely this is something specific to your setup.
It’s likely small comfort, but I’d be shocked if this was an issue with Obsidian; this is kind of an outlier report, even less than the panics you get. If all else fails, could try running dtruss against obsidian to verify filesystem activity and satisfy yourself that it isn’t over-writing files.