just saying... "Problem is definitely in arrays... but as soon their total length exceeds 24 bytes, issues start to appear. " doesn't seem to pan out.

The following reads three 16-byte arrays (48 bytes total) 20K times and verifies the arrayreads. No errors.
Same with the original two 16-byte arrays.

Code:
' device = 18F45K80

topline var byte [16]  'top part of the screen array
botline var byte [16] 'bottom part of screen
line3   var byte [16] 'more array data

ix var byte
ct var byte
cb var byte
c3 var byte

i var word
fail var word

fail = 0

for i = 0 to 20000
    ' clear arrays
    for ix = 0 to 15
        topline[ix] = 0
        botline[ix] = 0
        line3[ix]   = 0
    next ix

    ' read array data
    arraywrite topline,["ABCDEFGHIJKLMNOP"]
    arraywrite botline,["QRSTUVWXYZ[\]^_`"]
    arraywrite line3,  ["abcdefghijklmnop"]

    'read array char by char and check
    for ix = 0 to 15
        ct = topline[ix]
        if (ct-"A" <> ix) then fail = fail + 1
        cb = botline[ix]
        if (cb-"Q" <> ix) then fail = fail + 1
        c3 = line3[ix]
        if (c3-"a" <> ix) then fail = fail + 1
    next ix
next i

' check for failure
if (fail > 0) then
    i = fail
endif
Tried both PBP 3.16 and PBPL. No difference.

I just wrote another code, which simply reads values of array and writes data on 1602LCD.
Issue still exists
Post the complete code that doesn't work.