Woops! Looks like it was a silly oversight on my end. I was providing input images with pixel values on 0-255 and caffe was expecting to receive images on 0-1 then scale them to 0-255 itself (since I had set raw_scale=255).
I did take another look at mean.binaryproto (I'd seen it originally but dealing with the protocol buffer format scared me away from considering using it initially). But since you mentioned it I took another look. For those who might find this thread later, there's a good example of reading the file in the last comment here:
https://github.com/BVLC/caffe/issues/290.
As it turns out (and as one would hope), the resulting data is basically the same downloading the jpg from the DIGITS webpage for the dataset or reading from mean.binaryproto.