Thank you for the response. I don't have access to Oracle server logs, but we spent some time with DBAs on this issue a couple years ago and they said they saw nothing. Network people said they could monitor traffic and see what's going on if I could make it happen on demand, but I can't. I checked with DBAs just now, there is no idle timeout on our application users.
At this point I am not hoping to find a solution, just a way to deal with it that doesn't require extensive rewrites. I modified one app to make all the Oracle calls in separate threads so I could kill them if they took too long. That works, but I'm hoping for something easier to implement.