The other thing that may contribute to the greater speed of IIF is the following (just speculating here). Even though the IIF's have redundant calculations, the "checking" and the "result" are internalized within the IIF function itself.

Unlike the IF/ENDIF code - these statements have to be "parsed-around" by the interpreter (even though it is supposed to be byte-code internally) - yeah, maybe ?