Думаю, что значение Result.ValueX извлекается корректно. И у вас
проблема с тем, куда вы кладёте эти данные и откуда их получаете
для проверки. Почему бы вам не сделать Mouse союзом такой же понятной структуры и массива байт нужного размера? Тогда будете присваивать значение X результата значению X мыши явно. Никакие сдвиги не потеряются. А потом сделаете передачу данных байтами из массива этого же союза.
P.S. Положите целые байты в начало структуры, чтобы гарантировать их байтовое выравнивание. Это положительно скажется на объёме и скорости выполнения кода. Я почти всегда так делаю (у меня GCC).