It is good practice to do this, because if the inner renderer throws an exception your static field will remain set to true and can never go back to false. The try-finally block should also be inside the if statement that checks your static boolean.
This will create a memory leak if the level changes. You have to unload the entity with the level and also change the entity if the level changes.
As for your rotations: I would use the debugger to check what setupRotations in the renderer does and why it doesn't work properly. You can use a conditional breakpoint that only triggers if your static boolean field is true to only catch setupRotation calls that happen during the nested render.
You need to implement PreparableReloadListener. Usually you should subclass SimplePreparableReloadListener which provides a framework for splitting your I/O and main thread work. You can also use SimpleJsonResourceReloadListener, which will support a directory structure of JSON files similar to the vanilla tags or recipes.
Then use AddReloadListenerEvent to register your reload listener.