this is a good solution, seems like something that should be fixed in spree though, they should be updating totals prior to doing tax calculation. can you try to bring this upstream?