Found it. The cause is that you do a FindMatches on entities which are 'out of sync', i.o.w.: they're not refetched yet. The cause is the IsNull flag on the date field you set to a value. That field has its IsNull flag set to true, after SaveMulti, because it's set during fetch (and it represents that the original value read from the db is null). After the save this flag is still true and it is used in the FindMatches filter you use (as you compare to null).
In theory you shouldn't apply the filter right after the save, as the entities are 'out of sync', and first have to be refetched before you can proceed. There's a global flag which marks an entity as fetched after save. I looked into this and that method's code doesn't set the IsNull flag properly, it only sets the DbValue. The IsNull flag on a field doesn't look at DbValue, the field which contains the database field value, because that's unreliable in the situation where the field isn't a nullable type, but has a default value for the null state (through the typedefaultvalue provider): the flag then reports 'false' while the field is actually null.
Working with null values in-memory is a bit difficult, as an uninitialized object also contains nulls, but that's a different state than when you fetch a null from the db.
To work around this (which does cause a query per changed entity as it's refetched) you can use a DelegatePredicate on the property of the entity class instead, and compare that to null. Example:
filter = new PredicateExpression();
filter.Add(new DelegatePredicate(delegate(IEntityCore toExamine) { return !((OrderEntity)toExamine).ShippedDate.HasValue; }));
filter.Add(new DelegatePredicate(delegate(IEntityCore toExamine) { return !((OrderEntity)toExamine).RequiredDate.HasValue; }));
(of course, you can also use lambda expressions). You've to adjust the fields / entity type to your own type of course. Again, this will refetch the entities per-entity, as you touch the saved entities (so entity at index 1 and 2) and as they're out of sync, they're refetched, one at a time).