Hi Alex, et al,
FWIW, I had a problem similar to this, and I solved it as follows. First, as in your example, I used a try/catch block to catch any StaleElementReferenceException that may be thrown. Second, inside the "catch", I recursively called the method in which all this occurred, effectively starting all over again, from scratch, with a brand new list (followed by "return").
Of course, whether and exactly how this will work for depends on exactly what you are doing. There is a theoretical possibility of an infinite loop, if you keep getting the same exception over and over; but in practice I found it to work very well, for my application - the StaleElementReferenceException only occurred when the list I was traversing refreshed itself in mid-stream, which generally only happened once.
Hope that helps,
- John C.