Don't be confused by a title of a question. Here is an explanation.
Let's take Intel Pin. They claim that
The best way to think about Pin is as a "just in time" (JIT) compiler. The input to this compiler is not bytecode, however, but a regular executable. Pin intercepts the execution of the first instruction of the executable and generates ("compiles") new code for the straight line code sequence starting at this instruction. It then transfers control to the generated sequence.
However, software breakpoint (according to Reversing: Secrets of Reverse Engineering by Eldad Eilam) is:
Software breakpoints are instructions added into the program’s code by the debugger at runtime. These instructions make the processor pause program execution and transfer control to the debugger when they are reached during execution.
Basically both Intel PIN and e.g. OllyDBG does roughly similar things: altering the execution flow by inserting custom instruction. I know, that with PIN you can do much more, that then just pause under a certain condition, but it is not the point.
So, my question is what is the key difference between JIT compilation (as in Intel PIN) and Software breakpoints (as in OllyDBG or any other debugger)?