Oscilloscope reading not what I expect
It's hard to be specific without seeing your code, but I'll take a stab at it.

Your guess #1 is definitely true; any one-wire bus protocol has to have a lot of tolerance for timing variations, since it partly depends on the resistive pullup of a wire with unpredictable capacitance.

Your guesses #2 - #4 are unlikely; the crystals on both the microcontroller and the oscilloscope are fine.

What's probably happening is that the pulses you're generating with your firmware are not exactly the widths that you intended. An offset of a few instruction cycles could easily amount to 3 &micro;s. And this error would not scale with the timing interval, so longer intervals will seem more accurate, as you observed.

If you post the code you're using to generate the pulses, we could give more specific advice.