How can you tell if someone joins a mailing list (selects from a checkbox option in custom fields)?
How can you tell when someone updates their contact preferences?
You could use the extension CiviRules to do that.
You need to set up two different Rules, one for each process.
Select a trigger and condition with your requirements (group contact is added, and contact is changed, would be the triggers I think)
Dependent on your preference, you could create one of these actions: