I tried to find this in documentation (or at least another answers post) to refer to with specifics, but the general answer is Slunk will stop its inputs (monitor, splunktcp, script, etc) first, then wait for its queues to empty by being fully processed before stopping splunkd.
I wouldn't consider that "writing its queues to disk", instead it's more "stop adding to the queues and let them clear on their own".
I wouldn’t expect that to happen, no.
The queues should empty prior to splunkd stopping, by way of events making their way through the remaining queues.
But again, I haven’t been able to find documentation detailing this. But this is what I have witnessed as taking place.