Hi Arron. Thanks for posting the update!
I'm not expert but there are a few observations I'd like to share.
1. There happens to be a separate specification for ES version of GLSL which can be found here:http://www.khronos.org/registry/gles/specs/2.0/GLSL_ES_Specification_1.0.17.pdf
If that link ever breaks in the future, a link to the latest version of the GLSL ES specification should be found on this webpage http://www.khronos.org/registry/gles/
2. If you look at the appropriate section for "Prepocessor" commands in the GLSL ES document that I linked to (3.4) and GLSL document that you linked to (3.3), they both more or less say that "#if, #ifdef, #ifndef, #else, #elif, and #endif are defined to operate as (is standard) for C++" (The exclusions that the GLSL ES doc then goes on to mention don't seem relevant for this conversation.)
In C++ I can write the following code in one of my files and still compile it successfully.
4this is not valid code
I assume this works because before the compiler runs and checks what characters are valid against the "Character Set" section of the specification, and before other preprocessor commands are evaluated, the #if and related preprocesser commands have been evaluated and any characters inbetween #if 0 and #endif have been removed. Thus the compiler never even knows they were there. Hopefully that made sense and you can still see the validity of my original bug report.
Thanks again for taking the time to share an update!