I know it is likely my ATmega328 chip is bad,
And I know that it is more likely that your chip is just fine. The bootloader does occupy high memory. The sketch loads starting from low memory (but not starting a 0 as there are interrupt vectors and other users of the lowest addresses).
The boards.txt file contains the maximum loaded memory size for the various Arduino board models:
For Uno board: uno.upload.maximum_size=32256
For Duemilanove board: atmega328.upload.maximum_size=30720
The difference is due to the smaller bootloader used in the Uno board.
Lefty