Přišel jsem na to!
Konverzní list, který jsem zřejmě propojil to je buď špatné, nebo zastaralé. Ukazuje se, že objekt System.TimeSpan je to, co Npgsql potřebuje ke správnému převodu na objekt Postgresql „time“. Zdá se mi zvláštní, že by se snažili převést něco, co představuje rozdíl mezi dvěma časy, na to, co si představujeme jako HH:mm:ss, ale je to tak.
Spíše než změnit typ své vlastnosti RunTime z System.DateTime na System.TimeSpan jsem místo toho vytvořil vlastní IUserType a přepsal jsem NullSafeSet, aby vypadal takto
public override void NullSafeSet(IDbCommand cmd, object value, int index)
{
var obj = (DateTime)value;
((IDbDataParameter) cmd.Parameters[index]).Value = new TimeSpan(0, obj.Hour, obj.Minute, obj.Second);
}