Tìm ra!
Rõ ràng trang chuyển đổi mà tôi đã liên kết sai hoặc lỗi thời. Hóa ra đối tượng System.TimeSpan là thứ cần thiết để Npgsql thực hiện chuyển đổi thích hợp sang đối tượng "thời gian" Postgresql. Có vẻ kỳ lạ với tôi rằng họ sẽ cố gắng chuyển đổi thứ gì đó đại diện cho sự khác biệt giữa hai thời gian thành thứ mà chúng ta nghĩ là HH:mm:ss nhưng đó là cách.
Thay vì thay đổi loại thuộc tính RunTime của tôi từ System.DateTime thành System.TimeSpan, thay vào đó, tôi đã tạo một IUserType tùy chỉnh và ghi đè NullSafeSet để trông giống như
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);
}