What if you combine these 2 lines:
Code:
 MB_CRC = MB_CRC >> 1          
 MB_CRC = $A001 ^ MB_CRC
to be this:
Code:
 MB_CRC = (MB_CRC >> 1) ^ $A001 ; or try DT's poly here just for consistancy
This would kinda make sense to me as why yours might be ~twice as long, PBP may be creating double code to do it in 2 steps.