Fairly obviously you should NEVER be using 'BTFSS 3,0', utterly pointless, confusing, and non-portable - use the correct mnemonics as you're supposed to (which makes the code 'portable-ish' as well.
OK, took a bit of finding (as it was 2008), but here's TUT3.3 for an 18F2550 - the offending line was simply replaced by BTFSS STATUS, 0 - although it should really be BTFSS STATUS, C
I got it sorted out after a battle. I used the BTFSS STATUS,C but it would not register the overflow at the correct time.
The decf also affects the overflow bit C. So I swopped the addwf and decf around and its working now.