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.
Make your .profile consist of solely:
[ -f $HOME/.bashrc ] && . [ -f $HOME/.bashrc ]
as the first line of .bashrc, guard against weird stuff happening when running a bash script by jumping out early:
[[ $- != *i* ]] && return