Marcar explícitamente la clase derivada como interfaz de implementación de la clase base

interface IBase
{
    string Name { get; }
}

class Base : IBase
{
    public Base() => this.Name = "Base";
    public string Name { get; }
}

class Derived : Base//, IBase
{
    public Derived() => this.Name = "Derived";
    public new string Name { get; }
}


class Program
{
    static void Main(string[] args)
    {
        IBase o = new Derived();
        Console.WriteLine(o.Name);
    }
}

En este caso, la salida será "Base".

Si declaro explícitamente que Derived implementa IBase (que de hecho ya está implementado por la clase base Base y esa anotación parece ser inútil) la salida será "Derivada"

class Derived : Base, IBase
{
    public Derived() => this.Name = "Derived";
    public new string Name { get; }
}

¿Cuál es la razón de tal comportamiento?

VS 15.3.5, C # 7