It seems to me that once you redeploy the portlet, the class loader of portlet application is reassigned (to a new instance of WebAppClassLoader) AND your JNDI factory class is available in a .jar under WEB-INF/lib, so the JNDI naming is recreated.
If i were you, i would put a breakpoint at line 240 of InitialContext (in JDK code) to see what is JNDI factory class in use. Then, check if .jar containing that class exists in both tomcat/lib and WEB-INF/lib. If it is the case, let's remove the one under WEB-INF/lib
Thank you for looking into it.
I'll try to do what you suggested (I never "debugged" JDK code) and see if I can understand what's happening.