For MISRA compliance, simply do memcpy(dest, &csrc[pos * elemsize], len * elemsize);.
Though I don't quite understand why you need a function for this, instead of just calling memcpy directly. As mentioned in comments, MISRA frowns at the use of void pointers through advisory rules, since mission-critical software should be deterministic, not generic.
Also, len * elemsize is rather questionable, since this would limit the function to arrays of maximum 255 bytes.
You could potentially avoid a lot of MISRA problems by converting the function to a function-like macro. Not necessarily an improvement readability-wise, but as far as I remember this should be MISRA compliant:
#define copy_array(src, dst, pos, len, elemsize) \
memcpy((dst), &(src)[(pos)*(elemsize)], (len)*(elemsize))
void*if possible.const uint8 (*x)[elemsize] = src; memcpy(dest, &x[pos], len * sizeof *x);.