Yes, the conclusions here are most likely intuitively correct, but the science is missing. One missing piece of the puzzle is probably the grayscale.
GrayScale = 0.299 * R + 0.587 * G + 0.114 * B
Grayscale tells you if the color is for foreground/background - it's something like the weight the color has.
When I had to pick (too many) colors manually I finally automated color picking by using the following rules - and never had to worry about this subject any more.
A) When combining colors it's good to have matching Gray-Values. (Otherwise one will dominate - you can also use this to make one color stand out)
B) Gray value of background and foreground should differ a lot.
C) Colors of similar gray value should not be picked too close to each other (obviously...)