I would probably lean towards running flush() at the end of each report.  We can see how much it hurts performance, but I think robustness is probably preferable to speed in this instance.  

As a (not  example, John's repex code creates a giant netcdf database of energies and conformations.  The cluster ran out of space at the end of one round of repex.  NetCDF tried to output and failed--corrupting the entire 16GB database.  

I remember seeing similar issues when I was first working on MSMB2.