Some BTLE peripherals seem to send larger MTU's than the standard 23 bytes. Android does not seem to automatically negotiate the MTU value when connecting. This lead to cases where a received packet is truncated at 23 bytes because the peripheral sends more than 23 bytes.
BluetoothGatt.requestMtu() should be used to initiate the MTU negotiation. This function requires Android API v21.