Я думаю, потому что это безопаснее. Если бы они использовали IntPtr, конструктор мог бы быть вызван с любым значением мусора. С байтом * есть по крайней мере выстрел в компилятор, проверяющий, что память действительна и закреплена. Хотя преобразование IntPtr в байт * довольно просто.