If a developer makes a direct push to a branch using a repository's Stash URL, the post-receive hook gets successfully triggered.

However, the same hook doesn't trigger if the developer uses the Merge button after his/her changes are code reviewed.

I thought that since the pull request merge happens server-side, the post-commit hook would be the correct place to have a repository trigger. However, having the repo trigger in both the post-receive and post-commit still didn't work after using the Merge button in a pull request.

Is this a bug? What hooks are called before and after the server-side merge in Stash?

The mechanism that performs the pull request merge is actually based on a git fetch into the repository, which doesn't trigger receive hooks. Unfortunately there are currently no hooks that will be invoked automatically after a merge.