C, 337 chars
I'm sure there's room for improvement.
char*a="<^>V|-|-/\\/\\ppdd(())[[]]{{}}MMWW9966",*p,*q; n,x,y; z(c,r) { return(q=strchr(a,c))?a[(q-a&-4)+(q-a+r&3)]:c; } #define A(r)(r&3^3?1-r%4:0)* f(r){ return A(r)x+A(~-r)y+(r&2)/2*~-n; } main(r){ scanf("%d\n",&n); p=q=malloc(n*n+1); for(y=n;y--;q+=n)gets(q); scanf("%d",&r); for(r/=90;++y<n;puts(""))for(x=0;x<n;x++)putchar(z(p[f(r)+n*f(r+1)],r)); }