If you've configured your WHMCS products with monthly, semi-annually and annually billing periods where semi-annually and annually is priced with a discount, WHMCS will not take this into account when clients up- or downgrade.
User has a product that costs 100 monthly, 500 semi-annually and 900 annually. Client has paid for annual renewal of this product today (costs 900).
User wants to upgrade to a higher tier that costs 200 monthly, 1100 semi-annually and 1900 annually.
Having paid 900 already, the upgrade to the higher tier would cost them 1000 if they don't change the billing cycle.
If they change the billing cycle to monthly, they are charged 1454.84.
This makes no sense to me as the client has already renewed their hosting product for a year.
The upgrade/downgrade price should show the price for the current billing period. Only once the product is renewed, it should be charged whatever the monthly price is (in this case, 200).
This works the other way around as well - upgrading from monthly to annually will show the customer a lower price than it's supposed to.