First, you don't want to find all files, only those whose name contains a space:
find . -type f -name '* *' -print |
Second, your read loop will strip leading or trailing spaces from the filenames (probably not a problem, but you never know) and remove any backslashes (also probably not a problem, but why risk it?):
while IFS= read -r file
Third, modern versions of tr do not require the replacement to be repeated:
file_clean=$( echo "$file" | tr " ()&'" "_" )
Fourth, the mv line will fail when a filename contains a space (which, given the problem you are trying to solve, is always).