diff -ur dirA dirB
The result was large and messy and included a lot of .svn files (long story). So to get an idea of how many files had differences I ran diff with -q for Quiet. This just outputs one line per changed file and also a line for if a file only exists in one or other directory. I then used grep to ignore any lines with .svn in them, and finally passed the whole lot to wc (for Word Count) to tell me how many lines there are.
diff -urq dirA dirB | grep -v .svn | wc -l
If you get a number greater than zero, your codebases are not identical and you have discovered why your fault is “intermittent”.