não faça
param.Value = dt.ToShortDateString();
deixe apenas
param.Value = dt;
Você está tentando inserir uma string no campo DateTime - com certeza o PostgreSQL irá reclamar.
use NpgsqlTypes.NpgsqlDbType.Timestamp se quiser evitar perder as informações de tempo