How to interpret $BPP^{NP}$
You should think of this as the class of problems who lie in $BPP$, but in a new (relativised) world where the model of computation is slightly different. Turing machines now have an additional query tape and three new special states, $q_{\text{query}},q_{\text{yes}},q_{\text{no}}$. Upon entering the state $q_\text{query}$, if the contents of the query tape is $s\in\Sigma^*$, then the machine goes to either the yes or no state depending on whether or not $s\in SAT$.

The key point is that nothing changes in the BPP part, the only thing different is the computational model. This actually changes everything, but luckily we can integrate the oracle to the standatd Turing machine without changing basic notions such as time/space complexity. This allows us to talk about classes such as $P, NP, BPP$ in the new model (we can define them in exactly the same way).

Note that we don't have a general definition of $A^B$ for two complexity classes $A, B$. We use this notation when $A$ has a natrual extension to the relativised (oracle) world.

Additionally, to define our model of computation precisely we need to specify exactly what is the oracle (we need to define the transition function from $q_{\text{query}})$. Thus, we can't have an algorithm solve every NP problem in a single step, we need to choose a problem in order to specify a well defined behavior for the machine. It is not hard to show that for every two NP complete languages $L,L'$ it holds that $\mathsf{BPP^L=BPP^{L'}}$. So when we write $BPP^{NP}$ we mean languages having a BPP machine with access to a SAT oracle (or any other NP complete language of your choosing). In cases where the definition of $A^B$ might depend on the exact choosing of the oracle, statements involving $A^B$ usually hide a universal quantifier on the oracle, and should be read as "for all $o\in B$ ...".