Some random thoughts...
You don't mention what version of Arduino IDE you're on. Newer ones (1.0+) bundle an interrupt-driven software serial implementation that (1) should me more reliable than the old one and (2) needs interrupts. If you're using an older IDE, go get "newsoftserial" which is interrupt driven.
You don't mention what bit rate you're using. Even the interrupt driven implementation spends a lot of time in timing loops reading individual bits. There is a sweet spot around 9.6-19.2kbts where the timing is slow enough to be accurate and reliable, but fast enough that you can get other stuff done.
sa = Phstamp.available();
Serial.println(sa); // for debug see what it's getting
This sort of thing could be problematic because the input timing on the software serial is critical, but the output on Serial.println() could potentially block waiting for the serial out buffer to drain. Better to wait to write out the debugging until a less critical timing point. The interrupt-driven serial is more forgiving on this.