It seems to me that the logic in CCSprite for setOpacity and setColor are flawed when opacityModifyRGB is true. Granted the r,g,b values should change depending on the opacity in this case, but the manner in which they were being modified IMHO was incorrect.
I modified CCSprite so that externally you are always dealing with non-multiplied color. And internally it conditionally handles the opacityModifyRGB case for set/get color and set opacity. By all means tell me if I'm missing something about all this, but it seems to do what I want now in simulator and device when I combine setOpacity and setColor calls.
You may consider changing the following issues to fixed:
http://code.google.com/p/cocos2d-iphone/issues/detail?id=668
http://code.google.com/p/cocos2d-iphone/issues/detail?id=675
Since I cannot upload a patch here, I have attached it to the first issue listed above #668