You basically say that you want to go from a pointer (ENTITY*) to the original data (ENTITY), check the asterisk there!, by writing Tyre[ index ]. That's what happens in an array.
But you don't have an array: ENTITY* Tyre;
This is an array: ENTITY* Tyre[10];
Creating an array like that is in essence like saying: "give me an array of 10 elements from the type ENTITY*" (check the asterisk there). Then you have an array of 10 ENTITY pointers, and are able to assign an ENTITY* to an index in the array.
The compiler says you can't convert a FIXED variable (meaning the pointer that you get back from handle(me)) into a 'struct ENTITY' (meaning the ENTITY (no asterisk) from Tyre[ index ]).
Put into simple code, you're doing this:
ENTITY tyre = (ENTITY*)handle( me );
And a pointer (right part) can not be stored in a structure (left part).