Eventuell schlägt hier die Referenzzählung des Strings zu, wenn du den String über Pointer(...) zuweißt, wird da die Referenzzählung nicht behandelt.
Wird dann der übergebene String mal freigegeben, dann ist er weg und in .Data steht nur ein Zeiger zu einem nicht mehr existierendem String.
versuch es mal so:
Delphi-Quellcode:
//zuweisen
String(item.Data) := test;
// auslesen
test := String(item.Data);