P0446 is burned into my soul.
I chased this problem for a very long time and replaced one part at a time, same as you with your strategy. Eventually replaced every component. I have heard stories of dealerships that would completely replace the EVAP system if still under warranty and then total the vehicle if P0446 came back after that. I ended up replacing the entire EVAP system short of the gas tank. I eventually bought a smoke tool and did the pressurized smoke test, only to find no leaks (I should have done this first, there is an inexpensive one on Amazon that uses 12v battery with mineral oil).
You can test both valves by giving them 12v and seeing if you can push air through them, no need to replace them if the valves cycle with 12v.
I can't tell you how many times I took my truck bed off working on this, it was ridiculous. So heavy and hard to do alone. I even wired into the sensors so I could read them on my Fluke in the cab, because the EVAP test takes so long to run and complete. Anyway I went through great lengths to troubleshoot this on my own.
One night I was up late and on my second glass of bourbon and found a guy on Youtube who has a video series on EVAP systems and how they are designed and work. It was much like a college course. Probably 80 hours of videos. I think he was the engineer who designed the evap emissions system on modern vehicles if I recall correctly.
Anyway I benefited from his lectures on YouTube and got a much deeper understanding about how the evap system software works in the truck's computer. In the most basic language, the computer looks for a specific set of parameters from the sensors and plugs it into a formula and expects a certain range of results. One of the variables is a change of fuel level before and after the test. This was one angle I hadn't thought of so I took the truck bed off for the 100+th time and inspected all of the fuel pump/fuel gauge wiring. I noticed one of the fuel pump ground wires getting hot after letting the truck run for 20 or 30 minutes with the bed off and decided I'd replace it.
New wire, flux, solder, dielectric grease, heat shrink, about ten cents total fixed the problem.
I was an afternoon away from programming an arduino to fake the sensor parameters necessary to trick the computer into thinking there was nothing wrong with the EVAP system.