The manual says with a 4MHz oscillator as you have, the pin is sampled every 20us which is way too slow for the fractional pulse durations you stated.
The different results can easily be explained since any low or high period could be entirely missed.

Your code is still pretty slow.
The fastest I can think of right now in PBP is this:
Code:
newbitstate var bit
oldbitstate var bit
counter var word
count var word
duration var word

newbitstate = 0
oldbitstate = 0
duration = 9000 ‘ set duration to sample the input


count = 0 ‘ reset count

for counter = 0 to duration
newbitstate = portb.0
if newbitstate != oldbitstate then
count = count + 1
endif
oldbitstate = newbitstate
next duration
Then Count will be the number of pin changes.
To get the pulse count, rather than check in the routine and slow it down,
just divide Count by 2 at the end, to get the number of rising edges,
and if the remainder is 1, the duration ended while the port pin was high.