My friend who's a native Chinese speaker told me this "今晚又要加班". I wonder why he used 又 instead of 再 since (as far as I know) 又 indicates a repetition of an action in the past, while in this case, I don't think he refers to the past because he is just about to work overtime again tonight (cmiiw). Could someone please explain to me?
Although he is not referring to a past action, it is a recurrent past action that is going to happen again. The idea of a pattern firmly established in the past, plus the emotional colouring, means that 又 is more appropriate than 再 here.
There's some contention about whether 了 is required after 又. I think with 要, as it's not as much an action verb (in this context) as some other verbs, 了 is not as required as in other contexts.
@Michaelyus already gave a good answer. Here is my way to interpret it.
Usually, we say 又, meaning something happened or will happen one more time(repetition). For example, 你又来了 implies that you have come here before and this is not your first time.
So， "今晚又要加班" implies that you have worked overtime before and tonight you will work overtime again.
Putting the grammatical correctness aside, I bet your "...native Chinese speaker..." wouldn't dare put it that way in front of the boss, LOL...., unless of course the boss is his dad or someone who would most likely not fire him.
It's like uttering "what, AGAIN?"
The "又" (which is strictly unnecessary for the sentence in question to be grammatically correct and make sense), is to impress upon the listener that there is some unhappiness here for having, against his liking, to work overtime again.
So, use it judiciously.