As I have allready pointed out to you, when you asked this question before, using 'set_timer', inside the interrupt, does not occur, till _after_ the interrupt hardware latency, and the time needed for the int_global routine to save all the registers (probably about 25 instruction times).
This is why your times differ by a small amount.
Add the offset you require to the timer register, don't use the direct 'set' like this.
The odd result on 32768, is unexpected. The compiler does correctly load 0x8000 int the timer registers with this. I'd try again, or look at the assembler code, and verify that the compiler is correctly taking the constant as a long (the behaviour you have, is roughly what I'd expect, if it was treating the constant as a short, and then expanding the low byte as a zero, into both the timer registers...).
You are doing a very dangerous thing, by using 'delay_us', inside the interrupt. If you need this sort of delayed pulse response, have a monitor outside the interrupt loop, and change the pulse there (using any routine inside the interrupt, implies that this routine, may have interrupts disabled if called outside the interrupt, resulting in massive delays in interrupt response...).
You also should recognise that your measured times will probably not be accurate. If you are using a digital storage scope, these will be in error, by up to one bit time (at the sampling speed of the scope, for the timebase selected).