The File::Find documentation says that 'preprocess' is meant for things that care only about the name. Doing file test operators is exactly the kind of thing that they are saying you should not do in 'preprocess'.
'preprocess' happens before chdir is called. So the only reason you would get "File1" in the output would be if you have "File1" in both a directory and a subdirectory of that directory.
Writing out $File::Find::name as well was $_ shows why you get "." with your second code. 'preprocess' is called after readdir(). Before you even get to readdir(), File::Find chdir()s into the directory you passed in and processes that directory itself, passing '.' to your 'wanted' sub.