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
By assuming that predicate is a Boolean property of an element, that if it is true, then the element should be removed:
int i = 0; while (i < list.Count()) { if (list[i].predicate == true) { list.RemoveAt(i); continue; } i++; }