The method inPublicMode() in ModeDependentRenderExceptionHandler is never called and ModeDependentTemplateExceptionHandler should not be deprecated because it's a key part of how the mechanism works.
When a freemarker template fails this is what happens:
Freemarker logs the exception always
It will then call the TemplateExceptionHandler to let it decide what to do
We use ModeDependentTemplateExceptionHandler which does different things depending on whether the instance is an admin or a public
For a public: it does nothing
For an author: it writes the exception to the output stream and then throws a TemplateException
A thrown exception gets passed to ModeDependentRenderExceptionHandler which again tests if the instance is an author or a public
For a public it will log the exception, but this code is never reached, see above
For an author it will log the exception a second time and write the exception to the output stream again (without the trace and with more details)
Note, that the error mechanism is the same for all freemarker rendering, not just the cms rendering. The user interface also uses the freemarker support, for instance the module manager ui and many gui controls, as well as the rendering of templates for email.