Компилятор в VC # 2008 проверяет доступные не виртуальные функции перед виртуальными, когда решает, что вызывать. Так как ваш класс Derived имеет не виртуальный MethodA (объект), который может быть вызван, компилятор вызывает его.
Если вы добавите виртуальный MethodA (объект) в Base, будет вызван Derived.MethodA (int), потому что тогда MethodA (объект) и MethodA (int) будут виртуальными.
Я недостаточно знаком со спецификацией языка C #, чтобы знать, является ли это заданным поведением, или ошибка в компиляторе.