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.