You don't need to stop the filter to prevent that. In fact, that's exactly what flushing is for.
Decommit the allocator is needed, becides, we need to stop the reader thread, which means we need to stop the IWMReader. And that's exactly what asf_reader_cleanup_stream() does. So maybe we could replace IBaseFiler_Stop() with asf_reader_cleanup_stream()?
[though note that you also have to put it back in paused state afterward, which this patch is missing]
I'm not sure if Pause() are necessary, the Pause() in the document is to restart the thread and start pushing data again. We have IWMReader_Start() which did this.