You're right phh about NLS_LANG, I think papps' problem comes from here. NLS_LANG does overrule the init parameter. Here is an excerpt from the "Oracle9i Database Globalization Support Guide", which you can find here :
Table 3-1 Methods of Setting NLS Parameters and Their Priorities
1 (highest) Explicitly set in SQL functions
2 Set by an ALTER SESSION statement
3 Set as an environment variable
4 Specified in the initialization parameter file
Furthermore, if you follow the link I gave you and go down a little, you will notice that NLS_DATE_FORMAT is "Derived from NLS_TERRITORY", so if you have NLS_LANG environment variable with its TERRITORY portion set (eg : FRENCH_FRANCE.UTF8), it will define the default NLS_DATE_FORMAT unless you change it either at the session level or at the query level.