Have you looked at the function I mention in the task? It uses one query to fetch both level 1 and level 2 tax rules, then loops through them, calculating the amount for each. No I didn't look at the pricing presenter, but it must of course follow the progression you list. When the taxes are retrieved in the right order getTotal() does it in this form:
price = sum(items)
level1_amount = price * level1_rate
tax_total = level1_amount
level2_amount = (price + tax_total ) * level2_rate
tax_total += level2_amount
total = price + tax_total
This is a super simple fix. Just needed to add an order by to make such the rules are fetched in the right order.
You should create tests that show this problem not working correctly and your fix resolving it. It would be useful to have unit tests for this method if there aren't any already so we can continue to ensure it works correctly.