Lo averigué. Esto no es un error con PHP (aunque solía serlo), es un error en algunas versiones de phpmyadmin. El mismo error vuelve a aparecer de forma intermitente y luego se corrige en varias subversiones (ver arriba):
#1312 - PROCEDURE [name] can't return a result set in the given context
Este comportamiento parece estar limitado a instrucciones SELECT dentro de procedimientos almacenados dentro de phpmyadmin .
El uso de un cliente como MySQL Workbench soluciona el problema (o puede actualizar phpmyadmin, pero eso es una molestia si está en un servidor compartido como yo).
De todos modos, gracias a todos por su ayuda.