Isso é um comportamento inesperado em
ExecuteReader()
- provavelmente um bug. Nas profundezas do ExecuteReader() algum erro aleatório ocorre, provavelmente um tempo limite de rede, a conexão é fechada e, em seguida, um SqlDataReader fechado é retornado como se nada tivesse acontecido. Não é de admirar a chamada subsequente para HasRows produz uma exceção.