Breaking it down a bit
reboot_hint
is the name of the variable you have chosen to store the registered output in.
Inside reboot_hint is the output from the module. The module results are put into a key value structure with a key of results. This is probably done to keep the structured module output separate from other things that might come out of the module (like stdout and stderr contents). Within results there are more key-and-value pairs, and the one we are interested in is reboot_required.
So that gets us to
reboot_hint.results.reboot_required
For when: to be useful it need to receive the some kind of test result - something that is either true or false. We are in luck here because
reboot_required contains a value of false or true so when: can use that directly.
To make a slightly silly example, if reboot_required returned a string like "next_wednesday" then you would have to write the when: like this
when: reboot_hint.results.reboot_required == "next_wednesday"
There's a lot more you can do with this. Two things that are well worth understanding are the kinds of things you can put in module output - well worth a read of the JSON spec which is only 1 page and can be found here:
www.json.org and the other is getting an idea of the things you can do with variables using filters in Ansible see
http://docs.ansible.com/ansible/playbooks_filters.html for ansible's built in filters and here for the full list of stuff that jinja2 (which ansible uses) can do.
http://jinja.pocoo.org/docs/templates/#builtin-filters Hope this helps,
Jon