Yes, a few different ways to do this. Easiest is the following condition, which is exactly what you describe: when tag = retreat > event color = hex code
That just changes the default event color to whatever you want. But, you can also make the event color field dynamic so that it always points to a field with a hex code. Check “use dynamic color for each event” and then you select the field (in your case, “Eventcolour”. On top of that, you can use a condition to change the field (when dynamic color is checked), so that if you have 2 different fields with different colors, you can change them.
EDIT: I think option 2 is actually the one that will work for you now that I’m re-reading your question. So, turn on dynamic color so that it will pull from whatever is in the field for any event. Retreat, for example, would have a different value than some other tag.