I think this should do it:
#+BEGIN_SRC elisp
(defun count-words-in-subtree ()
"Count words in current node and child nodes, excluding heading
text."
(interactive)
(save-excursion
(save-restriction
(widen)
(message "%s words"
(-sum (org-map-entries (lambda ()
(outline-back-to-heading)
(forward-line 1)
(count-words (point)
(progn
(outline-end-of-subtree)
(point))))
nil 'tree))))))
#+END_SRC
I haven't tested it extensively, but it seems to work correctly,
counting the current node and any child nodes, but not going into
sibling nodes. I've been thinking about doing this for a while now, so
thanks for reminding me! :)
Oh, and it uses the dash.el library, which most Emacs users should
have...