How to make role field on approval in the Edit Profile page by Admin
You can't allow the users to change the role/profile directly, if this is what you want. What you'll need instead is another field to act as a proxy for the roles, so you would have a checkbox for each one.

Then you can use a rule to detect a change to the user and if there is a difference in the old and new values of this field, send an email to the admin.

I think this can probably all be done with contrib modules though it will not be a trivial matter, and would be easier to build and maintain with a little custom code acting as glue.