Нюанс в том, что возможность сузить возвращаемый тип в наследниках - это синтаксический сахар.
На самом деле в классе B объявлено два метода (грубо говоря):
1.
public virtual B Test() => new B();
DeclaringType = B
2.
public override A Test() => (A) this.Test();
DeclaringType = A
Чтобы получить именно тот, который DeclaringType = A следует искать метод не только по имени, но и по возвращаемому типу. К сожалению, GetMethod так не умеет:
Console.WriteLine(typeof(B).GetMethods().Where(x=>x.Name == nameof(B.Test)).Where(x=>x.ReturnType == typeof(A)).GetBaseDefinition().DeclaringType);//A