I'm not very familiar with the publishing, but I sortof solved this problem for myself in the export case - I say sortof because I let the photo be rendered, but then compare only the image itself to the exported version, and if they are the same, then don't upload the photo. If that would help please let me know and I'll send you source code. For those familiar with my plugins, that's what the "lax change detection" checkbox does.
I agree we need a way to find out if the reason for the republish is the photo or the metadata.
In my case the server metadata is stored in a database and is stripped from the image, so if only the metadata is changed then I only need to change the metadata on the server.
I would rather do this without having to compare the local metadata to the remote on each photo to see if thats why it changes, but even then that would be prone to errors (ie if both changed in the same publish).