En los términos más simples, me gusta pensar en lo siguiente:
Modelo: Se ve y se siente estrictamente como su modelo de datos. Para todos los efectos, es solo una representación de clase de su modelo de datos. No tiene conocimiento de su Vista ni de ningún elemento dentro de su Vista. Dicho esto, no debe contener ningún decorador de atributos (es decir, Requerido, Longitud, etc.) que usaría para su Vista.
Modelo de vista: sirve como un enlace de datos entre su vista y su modelo y, en muchos casos, también es un contenedor para su modelo. Se volvería inútil sin la Vista, por lo que normalmente no es reutilizable en múltiples Vistas y Controladores como lo es un Modelo estándar.
Como ejemplo, su modelo puede tener las siguientes propiedades, que son representaciones directas de su fuente de datos:
public string FirstName { get; set; }
public string LastName { get; set; }
Ahora, dado que su modelo de vista está vinculado a su vista, puede tener la siguiente propiedad, que concatena el campo Nombre del modelo y el campo Apellido juntos como una sola cadena:
[Display(Name = "Customer Name")]
public string CustomerFullName { get { return String.Format("{0} {1}", myModel.FirstName, myModel.LastName) }}