I don't see a problem here. The places that use free_symbols assume that the expression doesn't depend on any symbol that is not in the free symbols. It doesn't say anything about how the dependence is for those symbols that are in free symbols. 

For example, we know that diff(expr, x) is 0 if x is not in expr.free_symbols, but that doesn't mean that it is nonzero if x is in expr.free_symbols.