When using this command it will go from the current path down. So you have something like this:
dir1
dir1/temp_diag
dir1/temp_diag/file1
You are running your commmand from inside `dir1` and find enters into dir1/temp_diag and executes
mv ./temp_diag/file1 temp_diag/file1
You are actually telling the command to move the file to itself.
**UPDATE:** If you don't have any subdirs with files then you can add the option to find of maxdepth 1. So:
find . -type f -name 'diag*' -maxdepth 1 -mtime +30 -exec mv {} temp_diag \;
or if you have subdirs but don't want to include temp_diag then:
find . -path ./temp_diag -prune -o -print -type f -name 'diag*' -mtime +30 -exec mv {} temp_diag\;