You're not using avrdude by itself, even though you're skipping the bootloader? Hmm. It might work if you change your boards.txt from:
atmega48.name=Arduino Atmega48
atmega.upload.protocol=stk500
atmega48.upload.maximum_size=4096
atmega48.upload.speed=19200
atmega48.bootloader.low_fuses=0xff
atmega48.bootloader.high_fuses=0xdd
atmega48.bootloader.extended_fuses=0x00
atmega48.bootloader.path=atmega
atmega48.bootloader.file=ATmegaBOOT_168_diecimila.hex
atmega48.bootloader.unlock_bits=0x3F
atmega48.bootloader.lock_bits=0x0F
atmega48.build.mcu=atmega48
atmega48.build.f_cpu=16000000L
atmega48.build.core=arduino
to
atmega48.name=Arduino Atmega48a
atmega.upload.protocol=stk500
atmega48.upload.maximum_size=4096
atmega48.upload.speed=19200
atmega48.bootloader.low_fuses=0xff
atmega48.bootloader.high_fuses=0xdd
atmega48.bootloader.extended_fuses=0x00
atmega48.bootloader.path=atmega
atmega48.bootloader.file=ATmegaBOOT_168_diecimila.hex
atmega48.bootloader.unlock_bits=0x3F
atmega48.bootloader.lock_bits=0x0F
atmega48.build.mcu=atmega48a
atmega48.build.f_cpu=16000000L
atmega48.build.core=arduino