I think you just need a different Process.
Going to the Order of Execution, it looks like what happens is this:
You have an Object A with Total = 30, deriving from two Object Bs with Amounts of 10 and 20.
You insert a new Object B with Amount of 10.
We enter the save process. Salesforce executes all of the triggers and so on down to step 13,
Executes processes and flows launched via processes and flow trigger workflow actions.
Your process goes off. It pulls the Total field from Object A, calculates the sales tax, and updates Object B. But here's the kicker - as you observe, it's looking at the "old" value of that roll-up summary Total, because roll-up summaries don't get updated by the system until Step 16:
If the record contains a roll-up summary field or is part of a cross-object workflow, performs calculations and updates the roll-up summary field in the parent record. Parent record goes through save procedure.
So your Object B process is never going to see the change to the roll-up summary on Object A. I would not recommend using a formula in this process to try to "correct" for the changes in the current transaction; that will be impossible to get right in the fully general case.
Instead, I'd do one of two things: either, as gNerb suggests, put the Sales Tax field on Object A, where it naively makes more sense, and cascade it down to Object B via a formula field; or move the updater Process to run on changes to Object A. If you take the latter road, the Process will fire upon the update made by Salesforce to the roll-up summary field in Step 16 above, and you can then perform that update down to the associated Object Bs.