Yeah if the copy length is less than 8k, then it doesn't set or clear _dx (_dl / _dh).
Arguments for farmemget:
; farmemget(void *dst, far void *base, int len)
"fastcall farmemget(word bx, farptr _fbank:_fptr, word acc)"
A:X hold LEN which gets copied to _CX at the start of the routine. _BX is already written by the fastcall handler. And _fbank:_fptr isn't _DX ($20fe/ff). So it's not like it's a missing parameter or such causing the problem (though huc has special labels for dealing with argument overloading). _DX is a temp 'reg' that didn't get initialized by the start of the function.