Hmm. I'm not sure why that might be a problem. There's a HAS_64K_LIMIT defined in dosish.h, but it seems unlikely to be related. Try this as an alternative and see what happens.
htm_sv = newSV(filesize + 1);
SvPOK_on(htm_sv);
SvCUR_set(filesize);
ptr = SvPVX(htm_sv);
Copy(*htmFile, ptr, filesize, char);
XPUSHs(sv_2mortal(htm_sv));
(newSVpvn takes two arguments -- a char* and a STRLEN -- while I only see one in your example... but I assume that's just a typo, as it would have been a compile-time error and there's no equivalent that uses only one arg.)