¡Lo descubrí!
Aparentemente, la hoja de conversión que vinculó es incorrecto o está desactualizado. Resulta que un objeto System.TimeSpan es lo que se necesita para que Npgsql realice una conversión adecuada a un objeto de "tiempo" de Postgresql. Me parece extraño que intenten convertir algo que representa una diferencia entre dos tiempos en lo que consideramos HH:mm:ss, pero así son las cosas.
En lugar de cambiar el tipo de mi propiedad RunTime de System.DateTime a System.TimeSpan, creé un IUserType personalizado y anulé NullSafeSet para que se parezca a
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);
}