It seems you are right and your code must be working fine. The reason might be that email sent from code behind uses cached call data. So don't be hurry to use the trigger I suggested - the result can be the same. =)
Still have no idea how to refresh data for the email message content. :\