I think Richard is correct. This from the manual:
SERIN begins storing data in the variables associated with each Item. If the variable name is used alone, the value of the received ASCII character is stored in the variable.
Meaning, in my mind, that you are actually receiving "3" "8" "4" "6" rather than 3846. If the LCD character codes are different than the ASCII character codes...
The manual goes on to say:
If variable is preceded by a pound sign ( # ), SERIN converts a decimal value in ASCII and stores the result in that variable.
This seems to indicate you will receive 3, 8, 4, 6 if you modify your statement. You can receive your data as byte array, and then use multiplication to expand the value into a word variable.
Editing to include this, a snippet from a recent project of mine that accepts a serial command in the format: CC*HR:MN to reset the time via serial input.
IF (CO[0] ="T") AND (CO[1]="I") THEN
REG_VAL[2] = (CO[3]-48) * 10 + (CO[4]-48)
REG_VAL[1] = (CO[6]-48) * 10 + (CO[7]-48)
GOSUB CLK_WRITE
CO[3] and CO[4] are the hour value of the time - I had to subtract 48 from the serial input to convert from the string value to the numeric value and multiply. I suspect you will need to do something similar.
Bookmarks