Non farlo
param.Value = dt.ToShortDateString();
lascia solo
param.Value = dt;
Stai cercando di inserire una stringa nel campo DateTime - certo PostgreSQL si lamenterà.
usa NpgsqlTypes.NpgsqlDbType.Timestamp se vuoi evitare di perdere le informazioni sull'ora