I agree, Waypoints and Track in a single GPX file, is the way to go, and make the Waypoints accurate enough that they really do identify the control location (eg the entrance gate) - because riders will assume no less.
One reason to have control Waypoints is so that if the Track fails for some reason, the rider may still be able to 'Go To' the Waypoint. So I would name the Waypoint starting with a number.
<trkpt lat="51.45349" lon="-0.034780000000000005">
<ele>29.200000000000003</ele>
</trkpt>
<hobbyhorse> Is it any wonder these files get bloated?
The longitude and elevation here are defined to sub-molecular levels of 'accuracy'. I know its not your fault, I know it's what Strava output, but speaking as one who still cares about bandwidth as much now as I did 20 years ago, this sort of stuff just makes me want to hit someone (possibly myself) with a bag of nails. 5 decimal places is sufficient to comfortably exceed the accuracy of the GPS system itself.
</hobbyhorse>
So I also need to insert each control using <wpt> </wpt>
tags?
But not quite as simple as that. Your list of Trackpoints is contained in a (or several) <trkseg> wrapper, and this (or these) in turn is contained in a <trk> wrapper. That is your Track. The Waypoints have to be outwith the tags enclosing the Track(s), they are not 'part of' the Track. To be fully compliant, they have to be positioned before the Track, and immediately after the header which usually ends with a </metadata> tag.
An example fairly minimal Waypoint, which places a square red 'bike' symbol on a Garmin map:
<wpt lat="53.0869" lon="-2.3379">
<name>3 Radway</name>
<sym>Bike Trail</sym>
</wpt>
The following would add a proximity alert, in this case 200metres (especially useful for info controls, IHMO - though proximity also has to be set up on each GPS). There's a limit of 10 (more than 10 will just behave as normal Waypoints).
<wpt lat="53.0869" lon="-2.3379">
<name>3 Radway</name>
<sym>Bike Trail</sym>
<extensions>
<gpxx:WaypointExtension xmlns:gpxx="http://www.garmin.com/xmlschemas/GpxExtensions/v3">
<gpxx:Proximity>200.00</gpxx:Proximity>
</gpxx:WaypointExtension>
</extensions>
</wpt>
Perhaps just put the route on RWGPS, plonk some POI at the controls and circulate the link to that, then anyone can bake their own version suitable for their device.... otherwise you run the risk of a load of moaning because you didn't cater for $device etc...
This is the best and worst of all worlds IMHO. Yes, all the above, but also you give a rider of limited understanding every opportunity to get it wrong and download an unsuitable file. For this reason, and because it makes the organiser look a bit lazy
I'm agin this.