driving 4 RGB LEDs with PWM using MSP430
What commenters are saying is that your current design without something to boost the voltage will never work. Take a look a this page from the datasheet . If you draw 15mA from a pin there will be a .6V drop from Vcc across that pin. So now you starting at 3V trying to drive a 3.1V LED. 


As for the software side you do not need very fast PWM. People stop seeing the flicker at a pretty low frequency. So say you want 120hz for your PWM. Have an interrupt fire at what ever number of brightness steps you want times 120hz. If you want 20 brightness levels then interrupt every 20*120hz or (1/2.4kHz) ~= 400us. Each time the interrupt fires increment a counter and compare it to your brightness value(duty cycle) for each of your LED. If its greater then toggle the LED. You can adjust the frequency and brightness steps depending on your timing requirement and number of steps you need. If you need the ISR to be really fast you may need to write it in assembly. 

Or you could use something like this http://www.ti.com/product/tlc5971 with a 5V boost converter.