A diferença está no retorno deles.
innerText -> Retorna somente o texto, sem formatações ou elementos html.
innerHtml -> Retorna o texto, COM formatações e COM elementos html.
textContent -> Retorna o text COM formatações, mas sem os elementos html.
Pelo que testei, fazer o set não tem diferença - ele sempre altera o conteúdo do elemento de forma "igual". Mas para obter tu tem esses diferenças mencionadas acima. Veja o seguinte código:
<!DOCTYPE html>
<html>
<body>
<h3>Differences between innerText, innerHTML and textContent.</h3>
<p id="demo"> This element has extra spacing and contains <span>a span element</span>.
</p>
<button onclick="getInnerText()">Get innerText</button>
<button onclick="getHTML()">Get innerHTML</button>
<button onclick="getTextContent()">Get textContent</button>
<p id="demo"></p>
<script>
function getInnerText() {
alert(document.getElementById("demo").innerText);
}
function getHTML() {
alert(document.getElementById("demo").innerHTML);
}
function getTextContent() {
alert(document.getElementById("demo").textContent);
}
</script>
</body>
</html>
Link de referência: https://www.w3schools.com/jsref/prop_node_innertext.asp