Using Arduino UNO to retrieve ATMega328P-PU chip signature
There is a nice explanation here about Atmel chip signatures.

It sounds like you already know this, so for others looking for help:

It says that there are different signatures in the Atmel chips you mention.  That you can over ride the Avrdude program using an "-F" switch.  Or you can change the Avrdude configurations to use the "other" Atmel chip (however, the consequences if any were unknown by the author).

This may be an obvious step, but double check to make sure the IDE's target board settings are correct.

You may also want to check the communications between the programmer and the target.  You might look into dropping the speed.  But the better way is to scope the lines to see if data is being sent to the target and if the target is talking back.  From that you can infer if the problems is a bad connection or if the chip has been damaged.

If you want to dig further using software tools you could look into driving Avrdude for your self.  There is a easy to read tutorial here and what appears to be an everything you wanted to know and more document here.

In the 1st tutorial (from ladyada.net) we see a test which they purposely try the wrong signature:


  Just for kicks try running this command avrdude -c usbtiny -p atmega8
  -U flash:w:test_leds.hex





  You'll see that it stops at step 2, once the signature is different
  than the expected one it stops. This is because code that is compiled
  for an attiny2313 wont run on an atmega8 (this is true of most
  microcontrollers, the .hex files are not cross compatible)


But more interestingly, Avrdude prints out the signature read back from the target!  So, if you run the same test, you could tell if Avrdude is able to communicate at all with the target.  That is, you may see all zeros or all ones or even an alternate message from Avrdude. Which could be an indication that the target is not talking.