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
A simple and straightforward solution:
Use a standard for-loop running backwards on your collection and RemoveAt(i) to remove elements.
RemoveAt(i)