С наследованием вы можете указывать только тип, ссылающийся на родителя, но не обратный. В вашем примере 3 получено из 2, поэтому 2 не имеет ни малейшего представления о нем.
Теперь, чтобы правильно привести приведение типа, оберните объект, чтобы получить доступ к методу родителя.
var tmp3 = new Class3();
((Class2)tmp3).Method2();
Сказанное является основополагающим. Я знаю, что я 3-й класс, но я хочу смотреть, как мой родитель через (Class2) tmp3. Но когда я хочу вызвать метод для этого экземпляра Class2, мне нужно закрыть ссылку на все это перед вызовом метода.