Почему блок дергается?
Потому что когда.b-popup появляется, он закрывает собой .b-block, возникает событие mouseleave, и его надо скрывать. А как он скрылся - его надо снова показывать, потому что на .b-block возникает событие mouseenter. Ну вот так оно по кругу и происходит.
Добавьте pointer-events: none для .b-popup. Или поместите .b-popup внутрь .b-block.
Потому что присутствует mousemove, оставьте только mouseover