Why is 'avond' as in 'goedeavond' meaning evening but 'avond' in this context meaning tonight? Shouldn't it be 'We eat fish this evening'?
Because there is a difference in how we describe evening between English and Dutch. In English 'this evening' and 'tonight' can be used interchangeably.
'What are you doing tonight'/'What did you do last night?' - is referring to the evening, not during the night.
It seems the Dutch are stricter with the use of night, and do not use it for evening.