Mr. Pallini is on the right track. Your code has this :
ReadRequest.Size = Size ? Size : sizeof(T);
and it is the sizeof(T) statement that is the problem. You can fix this in at least two ways. One is to adjust the driver so if it is passed a size of zero it will return how many bytes the string actually has and then you request exactly that amount. There are a few Windows API functions that work this way. The other way is to define a maximum size and make sure your text buffer is at least that big. Either way, you need to pass the size of a text buffer to the driver, not just the size of the pointer. Here is an example:
char* p = Driver.read<char*>( processid, 0x2A1575F818, 255 );
I picked 255 as a big text buffer size. In the driver, the size should be considered a maximum like in a call to strncpy. It should probably only copy text until it finds the null.