Another thing to consider and is 100% possible - when someone emails you a file, your email client encodes the data to some standard algo. So for example if someone sends you a file that has some unsupported feature, like an extra photoshop layer saved in a .gif or .png, it can basically filter it out. So you may not actually be seeing the problem when you upload their file.
but users are horrible at giving any good info.
Which is really your cue for doing it for them. :-) A corollary to your comment, it's even more difficult to work with them to step through, although you SAY "click this button" they may be doing something else, or somehow navigating to a completely different page. You can distrust their comments, but you MUST distrust their actions. :-)
I've always found error logs, or any server logs in general, cryptic at best when I want to know specific bits of info. Every good script will have error trapping, and for critical user input such as file uploads, when you REALLY want to know what they are up to, is an excellent place to use a custom logging function.
FYI, it's not just PHP. I had the same issues with a client years ago that had a huge Perl based real estate site. It wasn't until I started logging everything input into this system it all became clear. I can't remember the specifics of the errors - probably something like spaces or dots in the file name (which really hoses you up if you're validating by extensions) and in once case a .bmp extension uploaded as a .jpg. The biggest advantage
to custom logging is you can use it to improve your setup, it will reveal things you hadn't thought of. You can specify exactly what info you want in your logs, from the user's uploaded path to any cleansing and conversion of file names you might be doing. You can even record the process id of the upload to check it later against those cryptic server logs. :-)
It's not that difficult . . . create a location off the root of your server and append to a file. I set mine up so if they reach 100K, it overwrites the file (big files get difficult to work with in plain text editors.)