using bash, although this can be translated to sh/POSIX easily
for file in *; do
[[ "$file" =~ @2x~ipad\.png$ ]] || mv "$file" "${file%@*}@2x~ipad.png"
done
if files are not just png
s then use this (extension agnostic), assuming a 3 character extension.
for file in *; do
[[ "$file" =~ @2x~ipad\.[[:alpha:]]{3}$ ]] || mv "$file" "${file%@*}@2x~ipad.${file##*.}"
done
if those files are not grouped under some dir then try to find
them recursively under a specified root dir
while read -r file; do
[[ "$file" =~ @2x~ipad\.[[:alpha:]]{3}$ ]] || mv "$file" "${file%@*}@2x~ipad.${file##*.}"
done < <(find /path/to/root/dir/to/look/under -type -f -name "*.png")