If I upload a contact image by editing the contact record it works. I can see the contact image, and it has a URL when viewed from the contact record that looks something like: https://example.org/civicrm/file?reset=1&filename=image_a46992b081c6ccee3e54abcfdd0ba352.jpg&mime-type=image/jpg I can click on it and it appears in a pop-up window. Lovely.
If I upload the exact same image file through a webform such that it becomes the contact image for the same contact it doesn't work. It has the URL https://example.com/civicrm/file?reset=1&filename=custom&mime-type=image/ when viewed from the contact record, and instead of seeing the image I just see the word 'custom'. Clicking on the word 'custom' brings up a little error box that reads "The file is either empty or you do not have permission to retrieve the file", neither of which are true. The database has stored the image URL as https://example.com/sites/default/files/webform/pics/image.jpg
This used to work fine on an earlier version of Civi (4.6.x). I also imported contact records with 4.6.x that had external URLs for contact images and they worked fine - i.e. were viewable from the contact record, but again, now that I've upgraded to 4.7.24 all I see is the word 'custom'.
If I reference the field in a Drupal View, it can display the image without issue.