Если это байты:
byte[] managedArray = new byte[size];
Marshal.Copy(pnt, managedArray, 0, size);
Если это не байты, параметр размера в Marshal.Copy - это количество элементов в массиве, а не размер в байтах.Таким образом, если бы у вас был массив int [], а не массив byte [], вам пришлось бы разделить его на 4 (байты на целое), чтобы получить правильное количество копируемых элементов, предполагая, что параметр размера, переданный через обратный вызов, ссылается на# байтов.