In that case I would check the database startup scripts to see if the TZ parameter's being explicitly set incorrectly or if the .profile for the machine login being used for starting up the database has the TZ parameter value set incorrectly. BEQ protocol gets influenced by the current shell setting of TZ whereas using the tns layer, the TZ settings set during the database / listener startups influences the date / time settings.

For example on a solaris10 box :

$ echo $TZ
US/Eastern
$ date
Wed Apr 25 16:41:15 EDT 2007
BEQ protocol
$ sqlplus ods

SQL> alter session set nls_date_format='DD-MON-YYYY:HH24:MI:SS';

Session altered.

SQL> select sysdate from dual;

SYSDATE
--------------------------
25-APR-2007:16:44:06

SQL> exit

$ export TZ=US/Central

$ echo $TZ
US/Central

BEQ protocol
$ sqlplus ods

SQL> alter session set nls_date_format='DD-MON-YYYY:HH24:MI:SS';

Session altered.

SQL> select sysdate from dual;

SYSDATE
--------------------------
25-APR-2007:15:45:27 <= Took the TZ change

SQL> exit

$ echo $TZ
US/Central

-- Connection through the listener

$ sqlplus ods@devdb

SQL> alter session set nls_date_format='DD-MON-YYYY:HH24:MI:SS';

Session altered.

SQL> select sysdate from dual;

SYSDATE
--------------------------
25-APR-2007:16:49:54 <= Took the TZ value during DB / listener startup

Good luck.....

http://www.dbaxchange.com