OMG, @zzq, you’re amazing! 
Hmmm, all of curl ... -d tags=book, curl ... --data-urlencode tags=[book], and curl ... -d tags%5B0%5D=book (that’s tags[0], urlencoded, because --data-urlencode only converts the value side of the key=value pair, for… reasons) resulted in Internal Server Error…
but
curl -XPOST "https://www.beeminder.com/api/v1/users/me/goals.json" \
-H'Content-Type: application/json' \
-d '{
...
"tags": ["book"]
}'
totally worked! Mission accomplished, as far as I’m concerned, if we can get “you can set tags if you’re using JSON” in the docs 