Puppet's definition of what is truly True, False or Nil is completely insane. Now that Puppet 4 has opened up I think it's a good time to fix this, once and for all.
The problem has recently hit me in Types and Providers where trying to use Boolean parameters and properties is just impossible because the RAL in a lot of places checks for truthiness instead of nullness.
I'm sure there's other examples both in Puppet's internals, Types and Providers and the DSL itself. I believe most of the DSL issues are fixed with future parser though.