Hi Justin,
IMHO that's not your fundamental problem, the original issues were likely to be caused by using only byte variables and measuring the time between rising and falling edges and not a complete cycle (i.e. rise to rise or fall to fall).
It depends how you've biassed the input to the ADC, but the ADC certainly can't measure a negative voltage (i.e. less than "earth"). In fact the voltage can't even go much below earth (about minus half a volt) because of the protection diodes on the chip (which may be acting as a "dc restoring" clamp). It is indeed "disturbing" that your waveform has a different mark-space ratio to the original "pulse", but if the frequency is correct then the count also should be correct.
Personally, I wouldn't use the "10ms background counter" method for several reasons. Firstly 10ms is a little long, it will only give around 5bpm resolution at high pulse rates (say 180bpm). Also, that timing loop will probably be rather over 10ms. The PICaxe clock should be within about 1%, but PAUSE has been measured to be about 300us (3%) in error and the increment (+ or INC) and loop (JUMP) commands will probably add about 1.5ms (which cannot be decreased by using a higher clock frequency in the multi-tasking mode). A PAUSEUS of about 8000 might get closer.
So, I'd calibrate the rate against your 'scope readings as before, but the choice of the value of calibration constants is quite critical (that's why I had to edit my previous post several times), because it's very easy to exceed the two-byte (16-bit) limit of 65,535. For this reason I wrote some 32-bit maths routines in the "code snippets" section a few months ago (although they're rather more than snippets). However, you shouldn't need them, they're more intended for precise calibration of 10-bit ADC voltage measurements, etc.. You should be able to resolve within about 1%, or 1bpm using only word variables.
Cheers, Alan.