In FactorOutConstant function, when the expression is a SCEVMulExpr, the code was considering only the first operand for factoring. As the comment in line 258 states, all operands should be tested until one suitable is found.
I also removed the TODO about SCEVSDivExpr since this class is not present anymore in LLVM.
I'm not sure when you expect this to fire -- you should never have a SCEV mul expression with multiple constant operands, they should have all been folded into one (i.e. (2 * 3 * %val) => (6 * %val)). If that's not happening in some case, that's the real bug.