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
I would reassign the list from a LINQ query that filtered out the elements you didn't want to keep.
list = list.Where(item => ...).ToList();
Unless the list is very large there should be no significant performance problems in doing this.