1) I don't think there are any other way. Since all the actual communication is done by the stack, which the application layer doesn't have any access to except for the API's, you are limited to the API's given to you by the SDK.
2). I'm not sure why this might be happening. Have you checked the data of the packets to see if you get all the data? Or are data coming in broken into different packets?
Have you double checked if the packets are from the same device? Could there be advertisements from other devices? (just wanted to rule out the obvious)
1) I thought that would be the case, I just wanted confirmation thank you.
2) I have verified that all the packets are from the same from the same device, the cut of payload is consistent with the full depending on what's cut. Is it possible that my scanner has only switched to the same channel as the advertiser partway through the message?
I'm not sure if that is possible... My guess is that the problem probably has to be with the device sending the advertisement (not sure though).
Have you tried seeing the advertisements from the device using some other means? (perhaps Andoid/iOS app or other sniffer)
Also, can you post the expected advertisement packet and what you actually observe?