There are a lot of questions in your post.
If you set Mach3 to Automatic Toolchange mode, it will run the M6 start macro, and then continue on. That's not what you want.
As you guessed, you want "Stop spindle, wait for Cycle Start." As it says, it will stop the spindle, so you don't need the DoSpinStop().
However, it's a good idea to always have an M5 in your g-code prior to the M6 to stop the spindle before the macro.
The M6 Start should be modified the way you have it.
Once the M6 start is finished, Mach3 will wait for you to press Cycle Start. This is when you'll change the tool.
Once you press Cycle Start, Mach3 will then run the M6End macro. This is where you'll return to the previous position.
My recommendation is to have the G code start the spindle rather than the macro.
Have your g-code something like this:
M5
T2 M6
S10000 M3
This will:
Stop the spindle.
Call the toolchange
Set the rpm and start the spindle.
Also, unless you have pre-measured all your tools and are using G43 length offsets, you're going to need to zero the new tool before you continue.