I guess the reasoning is that pre-commit should only concern itself about the new content being committed. What's in is already in, and it can't be thrown out. An amend is a special case of a rewrite, so it calls post-rewrite, which of course can warn about invalidness but not do anything about it.
So the bottom line is that pre-commit should check and stop the commit based on the index, and post-rewrite should warn, but post-commit has nothing to do with the committed content.
With your latest version I got some strange behavior: I amended without any change to check for the foreign_ident error. Then if I got it I removed the line in .gitattributes and amended again. Sometimes the .gitattributes change didn't get in at that point, instead I got "Removed foreign_ident from unchanged file foo". I had to reset HEAD^ and commit to get it in when that happened.
I also got "Unexpected output from git ls-tree" when check_ident was called for a file being deleted. I've pushed a simple fix for that, and I assume the githelper on the server needs to be updated with it before I can push my 7.9 tree. Or does that happen automatically?