While testing the bitbucket Jenkins plugin with a locally hosted instance of BitBucket (aka: Stash) I discovered that web hooks from BitBucket server to Jenkins only work when the Jenkins jobs have polling enabled for the Git repository. Having only the BitBucket web hook trigger enabled does not appear to be sufficient.
As a temporary hack I've simply enabled SCM polling triggers in my test jobs and intentionally left the polling interval empty, which essentially disables the SCM polling mechanism. Not only is this annoying, but it is very non-intuitive because it isn't obvious based on the logs and error messages that this is the root cause of the web hook triggering problem.