While running some queries with explain("executionStats"), I noticed that there was a lot of variance on query duration but it seemed to fall into a handful of distinct buckets of query duration. Upon further investigation, even though the SBE plan was identical each run, the field order of the filters were random. This meant that the query was fast when the selective part of the filter came first, and slow when the selective part came last. I've attached the executionStats output of a slow and fast set of filters. The query was run against the dataset defined in this workload.
[ { $match: { $and: [ { $or: [ { "obj.measurement1": 4 }, { "obj.measurement1": 9 }, ], }, { "obj.measurement2": { $lte: 175 } }, { "obj.measurement3": { $gt: 100, $lt: 800 } }, ], }, }, { $count: "count" }, ];