I am looking for a better pattern for working with a list of elements which each need processed and then depending on the outcome are removed from
Using the ToArray() on a generic list allows you to do a Remove(item) on your generic List:
List strings = new List() { "a", "b", "c", "d" }; foreach (string s in strings.ToArray()) { if (s == "b") strings.Remove(s); }