The reason it shift immediately back to red is the way Construct reads the events, on first tick it will check on collision, check if color red, change to green, and next tick, it will do the same, and since the sprite is now green, it turns it back to red, that's why "Else" condition is necessary here as blackhornet said, it basically will check if conditions are true, and if not it will check the "Else" condition instead, all that in a sub-event under your collision trigger;
And I agree, it's not recommended to use the wait action that way, it can become pretty messy later on especially with animation timing