Turns out you shouldn’t blindly replace code using Components.classes with its Services or MailServices equivalent. Anything you get from them won’t be strictly equal to anything you get via Components.classes. For instance,
var ct1 = Services.tm.currentThread; var ct2 = Cc["@mozilla.org/thread-manager;1"].getService(Ci.nsIThreadManager).currentThread; ct1 === ct2
will be false. Even if you don’t use === explicitly in your code, you might implicitly use it, with e.g. indexOf.
See bug 632422 for the gory details.