Here's an interesting extension I tried:
After compiling the first example I opened up Test$LogTest.class in a text editor and messed it up. The result was a ClassFormatError before the main() method was run (no Throwable was caught). In this case the ClassFormatError is identical in effect to the NoClassDefFoundError before, except that this time it affects a class referenced from the main class as in the second example, instead of a class referenced in a secondary class like in the first example.
Now I'm no classloading expert but here's my take on what happened. First the main class is loaded (obviously). Then, before calling main() it is linked, which involves loading (but not necessarily linking) LogTest. Everything is fine at this point (if LogTest.class is not messed up) so there are no errors. Then, while the code is executing, we come across a reference to LogTest which is loaded but hasn't had its links verified (otherwise you'd have to load every single dependent class at start up time). So when the reference comes up, the jvm tries to link it, which causes it to search for Logger. That fails and you get an Error during the execution of main().
In the second example Test2 itself references Logger so it can be loaded but not linked, which means that main() can't be run.