Wie schon gesagt, die Darstellung im Hexadezimalsytem ist nur einen Darstellung und nicht ein Speichern in einer Variable. Darum brauchst Du Dir deswegen keine Gedanken machen.
Zur Berechnung der Checksumme:
hexarray[z]= String(Serial.read(),HEX);
Laß den String weg.
hexarray[z]= Serial.read();
Dann müßte der XOR Wert auch stimmen.
Grüße UWe