It kind of depends how you start your shell. As others have said, a login shell will load your profile (it will look for .bash_profile first, then will try .profile). If it finds one of these, it loads them. A non-login shell (either interactive or non-interactive) will source .bashrc.
I'd suggest putting everything into .bashrc. The .profile/.bashrc split was kind of arbitrary and made more sense in the old days of UNIX when tty wasn't just a device name and meant an actual TeleType. It was meant to start certain things (like checking mail) on the 'main' login to a server, and just normal setup stuff for other shells. In most Linuxes you will log in now, you're not really logging into a shell, as you're logging into some graphical interface (KDE, gnome, CDE 'shudder'). The "spawn login processes" is now taken care of by your session manager. It's much less relevant now.
My suggestion:
Make your .profile consist of solely:
[ -f $HOME/.bashrc ] && . $HOME/.bashrc
as the first line of .bashrc, guard against weird stuff happening when running a bash script by jumping out early:
[[ $- != *i* ]] && return
Show us your the command you use to start your shell. – Nifle – 2010-08-16T14:33:37.927