Yeah, I would use tags or metafields to track if the customer received a certain email or discount.
That workflow looks like it will, when a customer leaves “gold” it checks if they are now in “silver” or another segment, and then sends an email. I think that will work, but it is possible that it takes some amount of time to appear in the new segment. I might add a “Wait” step after the trigger (maybe 1 min) if you see that happen to give it time.