This check is wrong. IsValidAddress takes a PSP address, while you have already converted them to PC pointers. 

If it crashes without this check, something is really very wrong and you should add some logging printing out srcBasePointer and dstBasePointer and the other parameters.