The reason that the IP header and first 8 bytes of a datagram data in the error reporting ICMP message is included is to help you understand what conditions might have created the error message. For example, destination unreachable messages have a few causes that the original header might provide. Sometimes the source IP address is very helpful in determining which router interface the ICMP ping message was sent. Sometimes it's not the interface you would think! Or you might have entered the wrong destination IP to ping. This would be helpful in relentlessly pursuing network or host unreachable messages.
For protocol unreachable messages, having the first bytes of the payload would be the TCP source and destination port. This would provide insight into which application port it was trying to connect to.
Having this information is also relevant to source quench and TTL expiration messages to troubleshoot why potential problems might be occurring with routing loops, etc. So there are several reasons why the original IP header and first 8 bytes of the payload might be useful.
For additional information and a more complete explanation, I did a little research and like Chapter 32 of Charles M. Kozierok's The TCP/IP Guide, which I found available through Google books.
Nothing like a little light midnight reading material to inspire creativity!
This was first published in January 2009