We probably should be treating RUNNING and PAUSED state the same in ProcessSample(). For example as far as I can tell in MF_SAMPLEGRABBERSINK_IGNORE_CLOCK mode ProcessSample() calls OnProcessSample() right away, as we do in RUNNING state currently. That's a trivial change of course, what needs to be tested is what happens with queued samples when restart time is ahead of sample timestamps. In attached test they seem to be dropped, but a test that will tell more would do ProcessSample(timestamp=1), ProcessSample(timestamp=10), ProcessSample(timestamp=20), then starting at clock position 5 or 15.
Regarding outstanding requests count, I think the logic is that it's always limited to the maximum of 4, so that when PAUSED any number of samples could be queued, but on restart 4 requests at max will be issued.