I really wouldn't use this as an interview question. I know the answer and the reasoning behind it, but something like this should come up so rarely that it shouldn't be a problem. Knowing the answer really doesn't show much about a candidate's ability to code.
Note that you'll get the same behaviour even if A.Foo is virtual and B overrides it.
If you like C# puzzles and oddities, I've got a few too (including this one).