I agree with Jesse that the Level API usage pattern isn't well designed for subclassing. To lookup a known level instance, the name and value of the custom level instance are adequate. A factory method to create custom Level instances is one good solution; or another option is to cache a Level instance of the custom name/value instead of the subclass instance.
Another observation to the Level API is that Level constructors initializes 3 final fields (name, value, resourceBundleName). However, Level.getName(), Level.getLocalizedName() and getResouorceBundleName() are not final and can be overridden. It's not obvious why not all Level instance methods are final and possibly an oversight. Unless there is a good reason to keep a reference to the Level subclass (I can't think of any), we should consider deprecating the Level class and define a new subclass to fix the memory leak and also address custom levels requirements/issues together.