The statement is legal and should work OK, however it doesn't.
It can leave arrays with unpredictable contents which could well lead to program crashes.
I had this logged as an issue on the bug board. It was closed off recently with the comment "Fixed for 1077".
So until we get 1077, baxslash's solution is the one to use.
You could make it into a function, something like
function CopyAtoB( thisIndex )
g_bItem[ thisIndex ].iState = g_aItem[ thisIndex ].iState
g_bItem[ thisIndex ].iType = g_aItem[ thisIndex ].iType
g_bItem[ thisIndex ].iSprite = g_aItem[ thisIndex ].iSprite
g_bItem[ thisIndex ].iFrameCount = g_aItem[ thisIndex ].iFrameCount
g_bItem[ thisIndex ].iFrame = g_aItem[ thisIndex ].iFrame
g_bItem[ thisIndex ].iTime = g_aItem[ thisIndex ].iTime
g_bItem[ thisIndex ].iTimeBetweenNextFrame = g_aItem[ thisIndex ].iTimeBetweenNextFrame
endfunction
Then when the fix is in, you can just replace the function call with the original statement.