Well, one thing I said incorrectly is that you would read the Message ID to determine if the message had a checksum, but in looking at the document again (and it was implied in the comment in my hand decoded packet), is that the Originating ID of 10 (0xE0 + 10 = 0xEA) indicates that the packets will use a checksum byte. If the Originating ID was 9 (0xE0 + 9 = E9) then the packets would not have a checksum byte.

I wouldn't do nearly as much string conversions as you do. Generally the only time to convert numbers to strings is when you have to display them, not to compare them, or collect them or operate on them.

Why not create an array of bytes to act as a temporary buffer. You can use the Read method of the Serial port to read data into that array at a given offset, so you can real all the available bytes into the array in one swoop, and accumulate the bytes by keeping track of the next position in the array to be written to, and reading future bytes into that array at an offset that "appends" the new data to the previous data.
Now that you have an array of bytes, you can start looking for your message, and you don't have to convert the numbers to strings.
I'm tired and heading to bed, so some example of using the byte array would be like the code below, but I'm not going to exhaustively proof it, so there could be an error.
Not shown is getting the data into the buffer and updating "used" (which would be done by the serial data reader). Also didn't add a calculate checksum function to generate a checksum to compare to the checksum byte in the packet.

Code:

Dim Buffer(1000) As Byte 'Array of bytes to use as a buffer
Dim Used as Integer
Dim Ptr as Integer
' Assume you've read and accumulated a number of bytes in Buffer, and set Used to the last index filled
Private Function extractPacketFromBuffer(ByRef pkt() As Byte) As Boolean 'note pkt() passed by reference so we can redim
Dim success As Boolean = True
Dim looking As Boolean = True
Dim payloadLen As Integer
Do While (looking)
If used > 4 Then 'can't have have a packet with less than six bytes
If Buffer(Ptr) = &HAA Then ' If we've found an 0xAA then
payloadLen = Buffer(Ptr + 4) ' Get the packet payload length
If used > 4 + payloadLen Then ' if we have enough bytes in the buffer for a full message then
If Buffer(ptr + 5 + payloadLen) = &HAB Then
ReDim pkt(payloadLen + 5)
Array.Copy(Buffer, ptr, pkt, 0, payloadLen + 6)
looking = False 'no longer looking
success = True 'we have a packet
Dim unProcessedIdx = ptr + 6 + payloadLen 'Determine the first buffer byte index after the packet extracted
If used > unProcessedIdx Then 'If there are extra unprocessed bytes in the buffer
Array.Copy(Buffer, unProcessedIdx, Buffer, 0, used - unProcessedIdx) 'move all the unprocessed bytes to the front
Ptr = 0 'point to the front of the buffer for next time
End If
used -= unProcessedIdx 'adjust the used count down to account for all the processed bytes removed
End If
Else 'not enough bytes in the buffer for a full message, so leave for now
looking = False 'no longer looking for a packet
success = False 'no packet found this time
End If
Else
ptr += 1
End If
Else
looking = False
success = False
End If
Loop
Return success
End Function
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim pkt() As Byte 'will be redimensioned by the function if a packet is retrieved
If extractPacketFromBuffer(pkt) Then 'if we extracted a packet
Debug.Print(pkt.Length) 'Parse the packet to extract data
End If
End Sub

__________________
There Is An Island Of Opportunity In The Middle of Every Difficulty.
Miss That, Though, And You're Pretty Much Doomed.