Ok, então depois de muito mais escavação, encontrei a solução.
O código original estava usando ExecuteReader. Eu mudei para executar ExecuteNonQuery.
Eu passo os mesmos parâmetros e tipos que eu fiz (2 entradas, 2 saídas, uma das quais é uma string, uma é um refcursor).
Quando ExecuteNonQuery é executado, posso ver o valor do 3º parâmetro (a string). então eu faço o seguinte:
OracleDataReader dr = ((OracleRefCursor)pRefcursor.Value).GetDataReader();
Então eu posso fazer meus loops habituais com o dr! Dias felizes!