Price set options that change are doable, but in order to make the totaling work, you've got to rewrite that bit of code, because it adds and subtracts the single item amount you check or uncheck.
Let's say the fee price option is pegged at 3%. You select $50, the fee option goes up to $1.50 and the total goes to $50. Now, you check the cover-my-fee box, bringing the total to $51.50. You decide to be more generous and select $100. The fee option goes up to $3, but it won't appear to take effect because the totaling only counts the change from $50 to $100. Your total will say $101.50. Now, you decide that if you're donating all that money, the least the organization can do is cover the fee. Uncheck the fee option, and the total goes to $98.50. It subtracts the option amount regardless of whether that's in the total.
Hook_civicrm_buildAmount will take care of the amounts on the confirmation page since by that point, you'll know what options are selected.