But I still don't understand why though
I think I see where you are getting tripped up.
With Starling touches, the event.target will always be the deepest Starling DisplayObject in the display list hierarchy that is touchable in the scene at that touch location, (based on calling hitTest() recursively on DisplayObjectContainer)
You are assuming with the Starling Button, that the Button sprite itself is the e.target. However, a Starling Button is a more complicated sprite container that contains children, a contents Sprite that might also contain a background and a text child.
So when you are actually getting a touch that is hitting over a Button, it is one of the Button's children that is actually e.target and not just the Button instance itself.
When you write a generic touch handler like you are doing, and doing e.getTouch(game), that works fine, but you are asking for all active touches at the top-most game scene space (e.getTouch(someObject) supports bubbling so any touch on the object you pass in or any of its children will return active touches)
So you have lost a bit of granularity when you want to ask the question, 'which specific object is now being touched?'
Many times one doesn't have to think about 'which object was touched' if instead you were adding specific touch handlers directly to only one button or any specific parent and didn't care whether it was this sprite or any of its children that were actually e.target.
So now you see why switching the pause button to a plain 'Image' made it work because an Image has no children, so there is no where else deeper to go with the touch than the Image itself.
So there are a couple ways you could still have the original button, maybe a hack but knowing your button is a parent you might be able to pull off a check like
if(e.target && e.target.parent && e.target.parent == pauseButton)
(assuming there is only one parent level up from what was touched to the button,
for button you might even need e.target.parent.parent )
or a little less code and generic, you could do another repeated filter check of touches using the pauseButton as a target
inside your objectPressed handler, like
if (e.getTouch(pauseButton, TouchPhase.BEGAN))
Finally, (more of an advanced exercise) some users find it convenient to override the default hitTest() function of DisplayObjectContainer if they are writing a deeply nested sprite with children, but still want 'this' to be the e.target for touches all the time and not any of its children. (one might have thought Starling's Button should maybe always return 'this' for its hitTest for touches but I don't think any Starling display objects do this by default).