@agorrod, michaelcahill – I changed it so we don't do a synchronous flush until after all leaf pages for all files have been written, in a checkpoint with multiple files, that should give the asynchronous flush more time to work before we have to wait.
Michael, I also changed it to not release the handle until after the synchronous flush. There's probably something obvious I'm missing, but I couldn't convince myself it was safe, that the handle couldn't be collected out from under us, and I didn't see any reason it would make a performance difference.