Once I confirmed that there was no heat on any setting, and checked the outlet for 240VAC. I unplugged the dryer and pulled the front, top and drum off the dryer. Fortunately, behind the mainboard there was a crude schematic with some helpful troubleshooting steps. I would not even write this up, if the basic steps mentioned on the doc had worked, and really they probably would have if I did not really want to be extra special sure of the problem before ordering a part.
I then took a closer look at the schematic and noted that the mainboard runs off the L1 side, and the L2 side (to boost the heater to 240VAC) is connected only to the output side of the heater coil, which runs through a centrifugal switch attached to the motor shaft. So 90% of the fun happens on the L1 side, which includes the (dumb) thermostats, the biased thermostats and of course the main board. I believe that the dumb (2 wire) thermostats are a safety feature designed to trip and cut power if they sense unsafe temps. This can occur if lint builds up in the air intake from the dryer drum, or there is some other problem related to excessive heating. I believe the "biased" thermostats are also used to regulate the temp of the dryer by cutting off the heating coils when the dryer has reached it's set temp, and then allowing the coils to come back one at a lower temp, to heat back up during a drying cycle. One of the biased thermostats is on the intake for the exhaust duct from the dryer drum, and it can also be affected by lint build up in the front panel ductwork. That is just my assumption based on what makes sense though.
I found a bit of lint in the front ductwork so cleaned that out, but it was not the issue. Since the dryer was apart, it was a good time to clean all the old lint out, and I even found some in the back of the drum behind the heat shield, which I spent about 10 minutes vacuuming out. Side note, the Kobalt portable vacuum is a really handy battery powered wet/dry vac for stuff like this. It has more power than my cordless Dyson by a mile.
So back to the fun. I then went through and checked each of the "dumb" safety thermostats, which have 2 wires, and are located on each side of the top of the heater housing (circled in green and aqua blue in the image below). At room temp, according to the doc I found, these should conduct normally, so I measured them for continuity and also for resistance - they seemed OK. I don't think it is necessary in this case, but one leg of the thermostat could be disconnected to be really sure of the readings. All testing was done with no power connected.
Next I checked the two biased thermostats. These are like the dumb thermostats, but have an additional 2 wires which (as far as I understand it), serve to heat a resistance wire that warms up and "biases" the thermostat. The resistance wire has a resistance of 9KOhms according to the doc sheet. I think the point of using biased thermistors is to allow for some adjustment of the trigger point for the thermostat (and use them a bit like a switch). Not important to the problem with this dryer, but the wires connected to the "bias" elements (9k resistors) on these biased thermostats, are individually controlled by relays on the board. One of these biased thermostats is located on the top left of the heater housing (circled in pink and a bit off the image). This one is in series with the blue (outer coil) wire going to the heater, at the bottom left of the image below (circled in dark blue). The other biased thermostat is located on the front blower intake from the drum (via the front door panel), and pictured with the readings I tested (center pic below). To test these biased thermostats, one side of each connection needs to be removed (or both can be removed). All testing was done with no power connected. They both tested OK.
There are a few more switches to check from here though. The first is a switch on the drum pully tensioner. It is located on the left side of the dryer, near the floor pan along the side of the motor. It just closes when the tensioner pulley is tensioning the belt. Since the drum is off, and the tensioner switch is open, I just moved the tensioner pulley to actuate the switch and checked it with my meter (resistance was good). Sorry no pics of that switch. It should be easy to check though, since it makes a nice click when it is actuated.
Recall that most of the fun happens on the L1 side (which powers the board). But the L2 side does have a switch in series that needs to be checked. It is a centrifugal switch attached to the motor, and it is the final say on if the heater is allowed to turn on or not. In the schematic, this is drawn as if it is a separate switch from the rest of the motor switches, but the dashed line indicates it is a "ganged" switch. That means it is part of the switches within the centrifugal motor switch, and is thrown along with another switch (at the same time). This switch was tested without power (everything unplugged). The switch was manually operated by pushing a brown plastic disc which goes around the front of the motor shaft, back towards the coils of the motor (see the first pic below). When activated, the centrifugal switch connects the purple wire (circled in dark purple in the main image of the heater above), with the black L2 line going back to the wall power inlet. This is a bit tricky to access, so I tested the continuity of the switch and it's resistance by removing the plug to the motor and clipping test leads from my meter to the prongs on the motor, which corresponded with the purple and black wires which the centrifugal switch, switches. The images are messy, but space was tight. The center pic below shows how I connected my test leads to the prongs on the motor switch.
As a side note, it is also possible to test this centrifugal switch by connecting a test lead to the L2 side of the power inlet, and the other where the purple wire connects to the lower left side terminal of the heater coils - again with all power disconnected. I tried that as well, but it takes some long leads to reach everything testing that way. The switch still has to be manually activated to test, since it normally only triggers when the motor is spinning at normal speed.
I was happy to find that the centrifugal switch was not the problem, since replacing it appears to require swapping the whole motor. Things were looking more and more like it has to be the board.
The board swap went well, but the connectors are really tough to remove (yet oddly easy to install). I suspect the problem with my board was a component called an NTC (negative temperature coefficient). My understanding is that these small disk shaped parts with 2 wires are used to limit inrush current. They are not typically used on a resistive load, but I guess they must help even in this case. To test that theory however, I would need to remove the old NTC from the board and test it by trying to heat it up and measure the resistance. For now I will just leave it as my suspicion, since I tested that the relays were working, and there is not much else in series with the heating coils that could cause a limitation on voltage or current.
Below are some pics from the board swap. I labeled each wire, since some of the wires are very close in color and easy to mix up. There are black, brown and black with white stripe wires, and they all get confusing without labels. There is also a plug on the board for "feature select" (see the green arrow below), and that needs to be moved from the old to new board. Finally, before connecting anything to the new board, I checked that the "normal/flash" switch on the left side (right side of the pic) was set to "normal" (circled in red below). I don't know what would happen if it were powered up with that switch in the "flash" position, but I'm guessing it could be bad (may wipe the program for the MCU on the board).
While working on the door, I also noticed that one of the door connectors had come unplugged (circled in green).
After that it was just putting humpty dryer back together again, which was a bit of a pain. The drum is hard to get aligned since the center bearing pin has to be inserted blind. It can help to remove the screws between the sides and the lower frame so the sides can be flexed out just a bit when installing the drum. Just don't forget to put them back like I did lol. The other issue is the belt, which for some reason kept rolling and getting twisted when I tried to reset the idler pulley, but after the third try I got it together without a twist.