I have a base class with the following (trimmed for brevity) declaration:
public abstract class MyBaseClass { public int RecordId { get; private set; } p
This is "By Design".
In the setter of Status you are calling this.Status = value. Status is a virtual property and hence it will bind right back to the setter of MySpecificClass.Status.
If you want to access the base property use base. instead
base.Status = value;