As with most client/server systems, there are two separate things that
need
to be made to work - the server has to send the data that you want it to
send (which might mean altering what the client requests, or server
config,
or ...) and then the client needs to "do the right thing" with the
data that is
returned.
Lastly, for this, I wonder if perhaps that final "false" in need_hostname
(in dhcpcd-hooks/30-hostname) might instead be something more like
${hfqdn} && [ "${hostname}" = "${hostname#*.}" ]