You have to call Freeze
before using the bitmap in the UI thread. And you can only access the Image control by means of its Dispatcher:
newImage = new WriteableBitmap(imageFromBackgroundThread);
newImage.Freeze();
IconImage.Dispatcher.Invoke(new Action(() => IconImage.Source = newImage));