SQL DB Trigger - mutiple column changes
Since you only want to fire the trigger if certain fields are updated, you will probably want to wrap the content of the trigger with 

IF UPDATE([field name])
BEGIN
[trigger actions here]
END


That at least will limit the number of executions.  I agree with the cautious statement by @LowlyDBA but since this will only fire 20 or so times a day, it's doubtful it would be a problem.

Once you've avoided unnecessary executions, I believe simplifying rest of the email contents in your SET statement can be resolved using a case statement.  Something like 

CASE WHEN i.value = d.value THEN '' ELSE 'email string value' END