He encontrado una solucion temporal, que consiste en hacer
Código PHP:
return eval($retorn);
Esto se debe a que si la cadena de texto que se le pasa a eval contiene un return, eval termina su ejecucion, pero no así el script donde se encuentra.
En mi caso funciona, ya que las opciones de valor de retorn son o bien un return o bien un Header('Location: ...'), por lo que siempre quiero que termine la ejecucion del script y no hay problema en poner return antes de eval, pero si quisiera en algun caso que eval() no terminara la ejecución del script no sabria como hacerlo...