Rozgryzłem to!
Najwyraźniej arkusz konwersji, który połączyłem to jest albo błędne, albo nieaktualne. Okazuje się, że obiekt System.TimeSpan jest potrzebny, aby Npgsql wykonał prawidłową konwersję do obiektu „czasu” Postgresql. Wydaje mi się dziwne, że próbowali przekonwertować coś, co reprezentuje różnicę między dwoma czasami w to, co uważamy za GG:mm:ss, ale tak właśnie jest.
Zamiast zmieniać typ mojej właściwości RunTime z System.DateTime na System.TimeSpan, utworzyłem niestandardowy IUserType i nadpisałem NullSafeSet, aby wyglądał jak
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);
}