Как и все остальные, B.Method2 вызывается. Вот еще несколько сведений, чтобы вы поняли, что происходит:
((A)B).Method2();
B.Method2();
Они оба будут вызывать B.Method1 (), потому что он был правильно переопределен. Чтобы вызвать метод Method1 от A, должен быть вызов base.Method1 () из B (который часто, но не всегда, выполняется в реализации B.Method1).
Если, однако, B был определен следующим образом:
class B:A {
new public void Method1() { }
... тогда метод А1 () будет вызван, потому что метод1 фактически не был переопределен, он был скрыт и спрятан вне правил полиморфизма. В общем, обычно это плохо. Не всегда, но убедитесь, что вы очень хорошо знаете, что вы делаете и зачем вы это делаете, если вы когда-нибудь делаете что-то подобное.
С другой стороны, использование new таким образом создает некоторые интересные вопросы для интервью.