Yes, unfortunately, it appears to be normal behavior in the Watch event. You would have more flexibility in modules further down to bring back all objectCategories in an array and then loop through the array for the form you're looking for, but not in the Watch event.
One "hack" I've used when I have an object with multiple forms is to set an Admin-Only field on the specific form with a default value. Then in the Watch event, rather than look for just the project with that categoryID, I look specifically a project with specifically that field having the default value.
For example, this task may have multiple forms in any stack order, yet scenario will fire if the field has this value set to Yes (or even if the field just exists):