StreamReader.ReadToEnd () retornando uma string vazia

Eu tenho um método

private static String DecompressAndDecode(byte[] data)
{
   GZipStream decompressor = new GZipStream(new MemoryStream(data), CompressionMode.Decompress);
   StreamReader decompressed = new StreamReader(decompressor, Encoding.UTF8);
   String result = decompressed.ReadToEnd();
   return result;
}

Eu tenho algum texto GZipped como entrada e o resultado deve ser uma representação em String deste texto. O problema é que o método retorna uma string vazia. O que está me intrigando é que, quando passo pelo método no modo de depuração e alcanço a declaração de retorno, a variável result é uma string vazia, mas se eu criar um relógio para a expressão descompactada.ReadToEnd (), ele retornará o texto. O que eu esperaria neste momento é que a variável result contenha o texto e a expressão decompressed.ReadToEnd () avaliada como uma string vazia. (A reavaliação da expressão decompressed.ReadToEnd () retorna uma cadeia vazia conforme o esperado).

@Editar: Eu descobri queNo meu caso ReadToEnd () retorna o textona segunda chamada retornando cadeias vazias na primeira e após a segunda.

Deve haver algo óbvio que estou perdendo aqui.