How about reverting your logic, adding items which doesn't match and just use the result collection?
List- itemsTaken = new List
- ();
foreach(Item item in myList)
{
if (!IsMatching(item)) itemsTaken.Add(item);
}
// use itemsTaken as if it were myList with items removed