Kom på det!
Tydligen omvandlingsbladet jag länkade till är antingen fel eller inaktuell. Det visar sig att ett System.TimeSpan-objekt är vad som behövs för att Npgsql ska kunna göra en riktig konvertering till ett Postgresql "time"-objekt. Det verkar konstigt för mig att de skulle försöka konvertera något som representerar en skillnad mellan två tider till vad vi tänker på som HH:mm:ss men det är så det är.
Istället för att ändra typen av min RunTime-egenskap från System.DateTime till System.TimeSpan har jag istället skapat en anpassad IUserType och har åsidosatt NullSafeSet för att se ut
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);
}