Found the solution. ssh-agent is invoked by default via X, and in my setup, it becomes defunct after a period of time, causing future invocations of ssh-agent from behaving normally.
All I needed to do was disable the ssh-agent command from automatically starting during my login, then script it in from my .bash_profile. For Red Hat 9 running in graphical mode (runlevel 5) ssh-agent is invoked by the /etc/X11/xdm/Xsession script. I simply disabled the lines mentioning ssh-agent.
Keychain is a front-end for ssh-agent so I'm now loading this from my .bash_profile. It works great for this purpose:
/usr/bin/keychain ~/.ssh/id_dsa
source ~/.keychain/${HOSTNAME}-sh > /dev/null
Now I can open all the terminal sessions I want and ssh into all of my servers without the annoyance of submitting a passphrase each time.