Por lo general, pasé 3 horas en esto, luego, JUSTO después de publicar la pregunta, encontré el problema. Entonces, para referencia futura:parece que MySQL no distingue entre mayúsculas y minúsculas en lo que respecta a las variables. El ID nombre de columna y id variable aparentemente lo confundió por completo.
Cambié el nombre del parámetro de entrada del procedimiento a retId y luego funcionó perfectamente.