Descobri. Este não é um bug com o PHP (embora costumava ser) - é um bug em algumas versões do phpmyadmin. O mesmo bug reaparece intermitentemente e é corrigido em várias subversões (veja acima):
#1312 - PROCEDURE [name] can't return a result set in the given context
Este comportamento parece limitado a instruções SELECT dentro de procedimentos armazenados dentro do phpmyadmin .
Usar um cliente como o MySQL Workbench resolve o problema (ou você pode atualizar o phpmyadmin, mas isso é uma dor se você estiver em um servidor compartilhado como eu).
De qualquer forma, obrigado a todos pela ajuda.