The help list had some discussion on the NgpsqlDataReader.HasRows behavior recently. I believe there's a bug there, that HasRows should not be an indication of what Read() will return. It looks like other providers update this value only when NextResult is called. I don't exactly understand the use case for this, but it does seem to be the behavior of some other providers.
What do you think about changing this? If you're ok with the change, I'll try to see if I can get figure out git enough to share a fix.
Josh