I'll take a jab at it. As the compiler attempts to interpret the two statements, the main difference is that the statement with true on the right side is not required to make a computation with the left handed Boolean, while the statement with false on the right side is.
A Boolean is an Object, thus it can be set to null. That is not where the exception is thrown. The NullPointerException is thrown when you attempt to execute an operation on a Boolean object that is set to null. In the true case, the compiler will pass casting null to a Boolean, and because OR'ing with true will always yield true, the conditional is true. In the false case, the compiler will pass casting null to a Boolean again, it will then check false, and if the condition is false, it needs to compute the OR with the Boolean because the condition could ultimately come out as true or false. When the computation happens, the NullPointerException is thrown.