https://nodejs.org/api/buffer.html#buffer_buf_buffer
Не гарантируется, что этот ArrayBuffer точно соответствует исходному буферу. Подробнее см. Примечания к buf.byteOffset.
Данные буфера в базовом ArrayBuffer начинаются с .byteOffset
Вы также используете неправильный формат для шестнадцатеричной строки этого Buffer. from reads, и вам также необходимо указать ему использовать шестнадцатеричную кодировку (по умолчанию - utf-8). Он не понимает пробелы (ни концепцию 16-битных значений, которая была бы задачей TypedArrays, .readInt16BE и других служебных функций).
buf=Buffer.from("02FD160000000000002E14811F8F75000000004D",'hex')
data=buf.buffer.slice(buf.byteOffset,buf.byteOffset+buf.length)
Я не знаю, где вы это взяли data, но похоже на 16-битные значения. Вам нужно будет удостовериться в том, что данные находятся в порядке байтов, чтобы байты не нужно было менять местами.
Получить ArrayBuffer с помощью TypedArray. Это работает в браузере:
data = new Uint16Array("02FD 1600 0000 0000 002E 1481 1F8F 7500 0000 004D"
.split(' ').map(x=>parseInt(x,16)))
console.log([...data].map(x=>x.toString(16).padStart(4,'0')).join(''))
buf = data.buffer; //ArrayBuffer