C++, 111 97 chars
std::string f(std::string s){for(int i=s.size()-1;i>1;std::swap(s[rand()%i+1],s[--i]));return s;}
Here is a full program for those who wish to test it:
#include<string>
#include<iostream>
std::string f(std::string s){for(int i=s.size()-1;i>1;std::swap(s[rand()%i+1],s[--i]));return s;}
int main(){
for(int i = 0; i<100; ++i)
std::cout<<f("letters")<<std::endl;
}
#Edit Realised there is no need to random both swap indexes, saved a variable and a few more characters.