Usually, such issue has a few possible causes:
1. The payment plugin ignores the order currency and takes the base currency instead
Since WooCommerce was designed to support only a single currency, without exceptions, some payment gateway plugins ignore the currency passed with the order and take the base currency from configuration instead. In most cases, the solution consists in modifying the affected payment gateway plugin, by replacing every occurrence of edd_get_option( 'currency' ) and $edd_options['currency'] with edd_get_currency().
Important: please note that this operation may not always be enough, as it depends on how the payment plugin was designed.
2. The payment gateway does not accept multiple currencies
Some payment gateways, such as 2Checkout can only handle one currency per account. They also assume that any order amount passed to them is in such currency. For example, a 2Checkout account in EUR will interpret all payments sent to it as being in EUR, regardless of the actual currency. Unfortunately, since this limitation is on the payment provider side, it's no possible to circumvent it.
When this is the case, we would recommend to contact the payment provider to see if they can allow your account to accept multiple currencies. If that is not possible, then we suggest to use a different payment providers for the unsupported currencies.
3. A 3rd party plugin is interfering with the Currency Switcher
Some 3rd party plugins may force the wrong currency at checkout. We recommend not to install additional currency-related plugins, as they can often clash with the Currency Switcher, overriding our product's functions and causing unpredictable results.