The difference is the purpose of the attribute.
inputmode defines what kind of input mode the user agent (browser / operating system) should present to the user. Basically what type of keyboard.
type is about what type of value is expected, to which the user agent may apply acceptance / validation patterns. That said, the user agent will probably assume a default input mode based on that too.
It's entirely possible, for example, that you don't trust the default input mode or accepted input pattern that is supplied by the user agent. In such a case, type='text' is the safest input type, while the inputmode is still at your discretion, which you could set to tel in this case.