Digging into this further, I found that Digest::SHA actually uses straight Perl to do the reading. When tried when Digest::SHA1, which uses PerlIO_read in XS like Digest::MD5, it fails. Perhaps the original question should have been: Can I use tied filehandles with XS modules that use PerlIO_read, and if so, how?
I found this post: http://stackoverflow.com/questions/13624061/how-do-i-use-tied-filehandles-from-perl-xs-code in which it seems they had to modify the XS. Am I out of luck here? Should I just put a warning in the POD about using it with XS-based modules? Or is there another way to do what I want (a class that can act like a filehandle) without using tied filehandles and which would be compatible with PerlIO_read?