I think I found the root cause of the problem. Using MPASM 5.16 from MPLAB 8.02...

If you look at the bottom of a .lst file, it reports ALL bytes used.

Consider this cut/paste from the end of one of my .lst files:

Code:
All other memory blocks unused.

Program Memory Bytes Used: 66451
Program Memory Bytes Free:  -915


Errors   :     0
Warnings :     0 reported,     0 suppressed
Messages :     0 reported,     6 suppressed
-951 bytes free? It can't be!
When I checked the .lst file before, I only looked at the word at the last byte in the actual code itself, I didn't check the last line of the .lst file...