То, что вы видите, - это эффект пузырьковой модели событий WPF, согласно которой события, которые происходят в дочерних элементах, обычно всплывают до родительского.
Что вам, вероятно, нужно будет сделать, это проверить Source или, возможно, OriginalSource свойства MouseButtonEventArgs и реагировать только на события, поступающие из типов TabItem.
Еще одна попытка - проверить свойство IsMouseDirectlyOver , которое должно возвращать false, если мышь находится внутри границ родительского элемента, но на самом деле находится над дочерним элементом.
Вы можете попробовать установить IsHitTestVisible , скажем, на TextBox в элементе вкладки, но вы, вероятно, обнаружите, что это имеет нежелательные побочные эффекты, такие как не изменение выбранной вкладки при нажатии на текст.