I ran into this problem today and it was a frustrating one to track down. The WordPress site was a very basic blog running on IIS and using the freindly perma-links settings.
When loading a static image that had been uploaded in WordPress the browser would return a 500 error, and the IIS log would show: "GET /wp-content/uploads/2013/10/Sale.jpg - 80 - 192.168.0.133 Mozilla/5.0+(Windows+NT+6.2;+WOW64;+rv:24.0)+Gecko/20100101+Firefox/24.0 500 50 5 46"
I finally found the solution on another blog, posted by iis_isz. I have copied the solution here to make sure I can find it again in the future, and for anyone else that has the same issue!
Explanation of the Error
The image issue was a permission issue, but simply setting it manually on the original image file or parent folder is inadequate. The behavior of WordPress is that it writes the original file using IUSR to a temporary system directory that is defined in the PHP.ini file. This temp folder does not have IIS_IUSRS permissions on it, so when windows moves this file from the temp folder to the application's upload folder, its final home, IIS_IUSRS only has read permissions, so the permissions are not inherited from the file's parent folder.