No lo hagas
param.Value = dt.ToShortDateString();
deja solo
param.Value = dt;
Está intentando insertar una cadena en el campo DateTime; seguro que PostgreSQL se quejará.
use NpgsqlTypes.NpgsqlDbType.Timestamp si quiere evitar perder la información de tiempo