C (gcc), 180 168 bytes
f(char*s){int j=strlen(s),m=j--/2,p=-1,i=0;for(;p&&i<m;j--,i++){s[i]^s[j]&&(p<0&&(s[i+1]==s[j]&&(p=++i)||s[i]==s[j-1]&&(p=j--+1)||p++)||p++);}return*s&&p<0?m+1:p?p:-1;} f(char*s){int j=strlen(s),m=j--/2,p=-1,i=0;for(;p&&i<m;j--,i++){s[i]^s[j]&&(p<0&&(s[i+1]==s[j]&&(p=++i)||s[i]==s[j-1]&&(p=j--+1)||p++)||p++);}return*s&&p<0?m+1:p?p:-1;}