If you want more than a copypaste of the single paragraph mention of the reflection optimizer from the manual, there is a good discussion here of the performance improvements from the reflection optimizer, as well as a brief discussion of the methods.
From my limited understanding (this comes all from reading, no experimentation on my part, so corrections are welcomed) the short of it is that there are actually two reflection optimizers:
codedom, which is basically generated and then compiled code (i.e. nhibernate generates wrapper Getter/Setter code for your entities and then compiles it). From the looks of it this only works on public members, and is probably extra expensive to use because it naively generates the wrapper classes (irrespective if whether a particular field is public), tries to compile it and throws an exception if it fails.
lightweight code generation, which uses the occult practice of reflection.emit to get/set values. This is still a very new area for me, but personal experimentation with this shows that you can use SRE to manipulate private variables very speedily, and the source at least seems to provide emission for basic fields/properties irregardless access modifier. This is the default.
As for the knock-on effect - well, from the shiny graphs in [1] it looks like if you are persisting/hydrating a lot of heavy objects during development it could be quite substantial. If not (and I hazard a guess that you aren't during testing/development) then it seems quite sensible to turn it off.