See my IPython notebook here for an example and the resulting image distortion.
This old question states that it was a bug in an old version of NumPy but I am running NumPy 1.7.1 as shown. Also adding the 'r' flag to np.load() didn't change anything.
This is bizarre, since on my work computer it functions fine. I'll copy the NumPy arrays over to that computer tomorrow so I can see whether save() or load() is at fault here.
EDIT: Okay from copying over the NumPy arrays to another computer which doesn't have the issue on its own images, it is clear that it is np.save() which is causing the problem (and using basic pickle.dump() instead had the same issue). I will next investigate whether this happens for different types and sizes of arrays.