From a programmer's perspective, you have actually asked a pretty nuanced question. You seem to have all the building blocks so I'll try and share how I think about this.
Quantum gates are sometimes named similary to classical computing operations. This is usually done when the quantum gate acts like the classical operation $\text{ if it is applied only to }\lvert 0 \rangle$ or $\lvert 1 \rangle$. This naming convention seems to have sprouted from the desire to show that a quantum computer can replicate a classical computer's calculations. Along those lines; the x-gate applied to only to $\lvert 0 \rangle$ or $\lvert 1 \rangle$ produces the truth table of the classical NOT. The controlled-x (cx), which is sometimes referred to as the CNOT-gate produces the same truth table for the target qubit as the classical NAND operation when restricted to $\lvert 0 \rangle$ or $\lvert 1 \rangle$. For those with a progamming background these labels carry meaning and can cause confusion.
So it is important to internalize when our classical analogy is safe and when it has broken down and needs to be abandoned. From my personal perspective abandoning classical computing means I switch out of "programmer mode" and into "math/matrix mode" (i.e. “Toto, I've a feeling we're not in Kansas anymore.”).
Now, as to what is going on in the swap test specifically:
- The first step of the test was to take $q_0$ out of the $\lvert 0 \rangle$ state into the $\lvert + \rangle$ state with the hadamard gate. Because our control gate is not exactly $\lvert 0 \rangle$ or $\lvert 1 \rangle$ we are exposing our algorithm to the quantum effects (phase-kickback in this case). Step 1 takes us firmly out of the classical computing and our analogies to classical conditional-controls no longer apply. But we get to exploit the power of the quantum effects.
- The Swap Test is named based on its gates (hadamard, cswap, hadamard, measure), not its algorithmic outcome. From a programmer's perspective the swap test is closer to a classical function which performs the dot product between $q_1$ and $q_2$ and stores the results in $q_0$. The changes to $q_0$ are truly a "feature" not a "bug" in the algorithm.
Why not swap back $q_1$ and $q_2$.
- From a classical computing perspective we already have the desired outcome of our algorithm, so any more operations just adds complexity and noise.
- From a quantum computing perspective all three qubits are entangled and any operation on one of them has the potential to impact the measurements we would get on the others.
Lastly: But in quantum computing it seems that most any interaction with a qubit potentially has an effect. Is this generally correct?
If the qubits are entangled, then yes.
When I start with two qubits $q_0$ and $q_1$, both are $\lvert 0 \rangle$ by default. I can treat them as two qubits and operations on them are, in classical parlance, un-coupled from each other. Once I entangle them, I no longer have two qubits, but I have one "bigger qubit". So anything I do, or did in the past, on either $q_0$ or $q_1$ has the potential to impact measurements I might make on any other entangled qubits.