Aquí es un sitio con una buena explicación:
http://www.dickbaldwin.com/csharp/Cs000120.htm
Para citar el artículo:
La razón por la que este tipo de polimorfismo se refiere a menudo como polimorfismo en tiempo de ejecución se debe a la La decisión sobre qué versión del método ejecutar no se puede realizar hasta el tiempo de ejecución. La decisión no se puede tomar en tiempo de compilación (como es el caso con los métodos sobrecargados).
La decisión no puede tomarse en tiempo de compilación porque el compilador no tiene manera de saber (cuando se compila el programa) el tipo real del objeto cuya referencia se almacenará en la variable de referencia.
En un caso extremo, por ejemplo, el objeto se podría obtener en tiempo de ejecución de una conexión de red de la que el compilador no tiene conocimiento.
Esta pregunta sería mejor con enlaces a aquellas preguntas relacionadas que encontraste y su mejor respuesta en cuanto a la diferencia. –
algún otro comentario ?? –