If the app server is using the wrong driver (as is often the case with ASE - people mistakenly assume the jTDS driver shipped with many app servers is ASE compliant - it isn't), that could be an issue. You might want to check what specific driver is being used.
However, remember, there are several ways to set an application context - programmatically and via set command. If you set an application context programmatically, by standards, the connection pool is supposed to clean up after you (and typically does). For example, if you create a fully prepared statement, when you release the connection back to the connection pool, the app server will tell the connection to drop all the prepared statements.
However, some programmers will issue language commands such as "set <optionname> on". Since this is often issued using a standard language command interface, the connection has no knowledge that it was done.
But a "next key" lock definitely indicates isolation level 3. You can verify via select * from master..sysoptions where SPID=### where ### is the number of the spid of interest.