Don't use POKE. Just use the register name followed by the value to write to
it like you have with ADCON1 = 15.

Poke $81,$FF is writing $FF to RAM address $81 in bank 0 on this part.

INTCON2.7 controls portb pull-ups, but you don't really need to turn them off
with all of portb set to outputs. And the default value of INTCON2 at POR has
them disabled.

Don't use RETURN mainloop. As Darrel already pointed out, this is causing
stack overflow. Using a specific return address here keeps the compiler from
generating RETFIE, popping the "real" return address from the stack, and
resetting global interrupts on return.

Another potential problem is using a timeout with label allowing exit from your
interrupt handler without clearing RCIF interrupt flag bit first.

Also with address = %00000100 and wait(address) your terminal program ( or
whatever you're sending serial data with ) needs to send this as non ASCII. If
you make address = "4", then it should work when receiving the ASCII value 4.

With the optional terminator stuck on the end, it can terminate reception of
the full 30 byte string too. Then HSEROUT [str buffer\30] will send the whole
30 byte string which may or may not be full of ASCII characters causing
garbage to be output in non ASCII array element positions.

Try this;
Code:
DEFINE OSC 20

' Setup Hardware for UART
DEFINE HSER_BAUD 9600
DEFINE HSER_RCSTA 90h
DEFINE HSER_TXSTA 24h
DEFINE HSER_CLROERR 1

RCIF var PIR1.5
Junk VAR BYTE
address var byte
sentinal var byte
buffer var byte[30]

init:
Pause 10 'Safe Start Up Delay

    ADCON1 = 15 ' All pins are digital
    CMCON = 7 ' Turn off comparators
    ' Poke $81,$FF ' Turn off PORT B pull ups
    INTCON2.7=1   ' Turn off PORT B pull ups
    
    TRISA = %00000000
    TRISB = %00000000
    TRISC = %10000000
    PORTB = $ff
    
    address = "4" ' or %00000100 +"0"
    sentinal = $FF '%11111111
    
    HSEROUT ["Activated"]
    
    HIGH 7
    
    ON Interrupt GOTO inthandle
    INTCON = %11000000
    PIE1.5 = 1
    
mainloop:
    @ Nop
    Goto mainloop
    
    
    DISABLE
    
inthandle:
    TOGGLE 1
    If RCIF Then
     HSERIN 100, intreturn, [wait(address),str buffer\30\sentinal]
     HSEROUT [str buffer\30,13,10]
     Low 7
    EndIf
    If RCIF Then inthandle
    
intreturn:
    WHILE RCIF
     Junk = RCREG ' trash leftovers to clear RCIF before return
    WEND
    
    Resume    
    ENABLE
    
    END
Send 4=12345678901234567890123456789 with MCS terminal program to it.

Then try inserting $FF in the string somewhere to see what happens when it
finds the terminator. 4=123456789012345678$FF9012345678