Instead of using their URL directly in your page, use a URL that points to a script of your own. That script requests the image. Use sockets or streams so that you can time out quickly if their server takes too long to respond, or if it starts serving something that is too large. Once you have retrieved the file use getimagesize() to check that the thing really is an image and that the dimensions are sane. If it all looks kosher, send out the appropriate image type header and echo the data you received. If something went wrong, send a 502 HTTP response instead.
The most obvious downside of course is that it puts extra load on your bandwidth: all these background images have to pass through your pipe twice - once when you request it, and once when you send it out to the browser.