I have the same problem that the join procedure takes long time on some nodes and in that case SF9 or SF10 is used finally. Compared the nodes that work well (SF7) with the slow ones, I have done configurations to safe power on the slow ones to let them operate on a battery. During my experiments I modified the US_PER_OSTICK_EXPONENT in config.h of the (Arduino) LMIC, and by that I got one node that joined formerly with SF9 or SF10 now to join with SF8. I have not finished my analysis, but it seems that the timing of the connected microcontroller is very critical on lower speading factors.
Update: I found here Over-the-air-activation OTAA with LMIC a hint which makes the RX window(s) longer. That works for me. My formerly not joining with SF7 node now joins with SF7. So the timing seems not to be accurate enough.