I think some of these other solutions are over thinking it. You were already so close. Instead of fading in and out the one image, you need to fade in a new image over top each time. I tweeked your code slightly below.
Here is the jsFiddle: http://jsfiddle.net/Q5YYG/
$(document).ready(function () {
var $backgroundimages = ['http://www.universitycompare.com/wp-content/themes/blue-and-grey/images/home-test.jpg', 'http://www.universitycompare.com/wp-content/themes/blue-and-grey/images/qanda-front.jpg', 'http://www.universitycompare.com/wp-content/themes/blue-and-grey/images/home-page-slide.jpg', 'http://www.universitycompare.com/wp-content/themes/blue-and-grey/images/TCE-New.jpg'];
var $backgroundcount = 0;
function fade($ele) {
// Determine which image is next
$backgroundcount++;
if ($backgroundcount >= $backgroundimages.length) {
$backgroundcount = 0;
};
// Put a new hidden image in front of the original image
var $new_element = $ele.clone();
$ele.after($new_element);
$new_element.hide().css('background-image', 'url('+$backgroundimages[$backgroundcount]+')');
// Fade the new image in
$new_element.delay(5000).fadeIn(1000, function() {
// After the new image is visible, remove the old image.
$ele.remove();
// Do the same thing over again
fade($new_element);
});
};
fade($('#stretchParent .HomeImage').first());
});