it seems that these two tags should not exist with one another.
leisure=golf_course is supposed to encompass the entire course and have additional tags relating to the address, hours, etc. Golf=* is supposed to describe individual features found on a golf course like a fairway, sand trap, etc.
If the leisure=golf_course tag is placed onto something like golf=fairway then that means the entire golf course is just that fairway. In line with the wiki description, the default renderer assumes every leisure=golf_course is a separate golf course and renders a golfing symbol onto every feature.
Performing a query for “leisure=golf_course and golf=*” returns some golf courses where every feature has the leisure=golf_course tag. It seems the individual mappers mapped the areas before the golf= tag was introduced, or did not follow the documentation.
There does appear to be a few standalone driving ranges or putting greens with both tags. I’m not sure whether in these cases it would be correct to use both tags.
Overall, this seems to be a somewhat simple and not widespread problem that might be fixable with a mass edit.
I think your analysis here is quite right. There are two issues here: golf=x likely being the newer tag to add detail and some “old” courses not having been updated, and secondly people deliberately ignoring the tagging rules of the Wiki because they like to see the golf icon on each fairway, a.k.a. “tagging-for-the-renderer”.
There is also a third common problem by the way: people creating a MultiPolygon relation for the leisure=golf_course feature, using the fairways as “inners”, and thereby essentially - from a technical point of view - saying that the fairways are not part of the golf course (they mis-use the MP as a type=site relation).
IMO, the leisure=golf_course tag should only be used on the outer way(s) (sometimes the golf course is split up in multiple disjunct parts, which can be combined in a valid MultiPolygon relation).
Whenever I see these issues, I try to correct them.
The key golf is hardly new. It was subject to extensive discussion back in 2009. Richard Weait produced a golf rendering not long afterwards. Other than that I agree, lesiure=golf_course is not just redundant on golf features, it is wrong. I also believe iD adds sport=golf to at least some of these features which is redundant, but not wrong.
One point not mentioned is that many golf clubs have multiple courses, and in many cases the (multi)-polygon reflects the land used for golf not individual courses. In many cases this is convenient (when driving ranges, putting greens and other facilities can be included in the bounds of lesiure=golf_course. In others this is sub-optimal.