I suggest doing it in line item callbacks such as before_validation to swap out price if possible, and then validation to ensure it is set to proper price or fail the validation to add the line item.

However if the user switches their currency in the middle of shopping then the order needs to be updated, and Squires mentioned that the order updater is skipping the line item validations.

This is by no means the "best" solution, but we wanted to get this issue posted to see what everyones thoughts were on best solution.