Как сократить такое условие?
element.previousSibling !== null
вынести во внешнее условие,
element.previousSibling.nodeName.toLowerCase() сделать один раз перед проверкой
остальное - внутри 
"h1", "h2", "h3", "h4", "h6", "p", "img"
можно сделать списком и проверять на вхождение в список
Наверное можно и без сравнения с null, ведь условие преобразуется в логический тип, а null в js преобразуется в false:if (element.previousSibling) { 
 // ... остальной код Дмитрия Дерепко
}

// Или без вложенных циклов
// сначала проверить:  если у элемента нет предшествующего элемента
if (!element.previousSibling) { 
  return element;  
  // вернуть элемент, чтобы другая функция что-то с ним могла сделать. 
  // Или вернуть false, не суть. Важно просто обработать сценарий, когда элемент 
  // идет первым в родителе. Можно просто выйти из функции.
}
// Дальше, если предшественник есть, делаем как в коде Дмитрия
const targetTags = ['h1', 'h2', ...],
    lowerName = element.previousSibling.nodeName.toLowerCase();

if (!targetTags.includes(lowerName)) { 
  // do samething
}

// Кстати, можно targetTags передавать сразу аргументом в функцию, чтобы код был чуть 
// более универсальным.
function doSomethingEpic(element, targetTargs) {
 // code
}

const someElem = document.querySelector('.epicElement');
const tags = ['h1', 'h2', ...],
doSomethingEpic(someElement, tags);Важно: метод includes не поддерживается в IE, полифилл есть на сайте MDN