Potresti avere una mancata corrispondenza della versione nell'assembly Types. Questo era un problema noto tra le versioni 10 e 11. Sfortunatamente il messaggio di errore non include informazioni sulla versione, motivo per cui sembra una sciocchezza!
Per aggirare il problema, puoi deserializzare la rappresentazione binaria del tipo, ad es. qualcosa del genere (se la tua colonna geografia è la prima nel set di risultati):
var geo = SqlGeography.Deserialize(reader.GetSqlBytes(0));
Esistono altre soluzioni alternative, inclusa l'esecuzione di un reindirizzamento dell'associazione per l'assembly.
Maggiori informazioni qui:https://connect.microsoft.com/SQLServer/feedback/details/685654/invalidcastexception-retrieving-sqlgeography-column-in-ado-net-data-reader