These (like most) colors are multiplied. Red (1,0,0) times Green (0,1,0) is black.
Same with red (1,0,0) times blue (0,0,1).
If you always draw white you can control the colors effectively with the Handles.color property.
EDIT: looking at what you’re doing above, I suggest you simply decide the color you want from a table already, pass it into the box call directly, no need for stateful Handle.color calls.
I noticed this shortly after posting this topic. Is that a bug, or is it the intended behavior? It does not mention this behavior in the documentation for DrawSolidRectangleWithOutline.
The above is just an example. I draw many objects, most of which require the Handle.color property.
For now I can just set the color to white, as you have noted, but it would be nice if either the documentation was clarified or this was fixed to not require resetting the color.
The Handles.color property is intended to modify the colors of other things painted through Handles, not replace them. Like @Kurt-Dekker said, this modification is a pointwise multiplication: Red (1,0,0) x Green (0,1,0) = (10,01,0*0) = Black (0,0,0). This is intended behavior.
Were you expecting DrawSolidRectangleWithOutline not to be affected by Handles.color? Rule of thumb for editor windows is that everything is filtered through the current color.
I understand the concept, and why its not considered a bug, and it makes sense when taken in that context, but adding a little bit to the Handles.color documentation that says its a multiplier, would have saved me hours of debugging and headache; and might just help the next person. At the very least, this topic might show up if they Google the problem.