Hi,
Everything you mentioned would be client side… which can be faked easy…
Only thing i see is letting nodes test each other at random points with random data and random calculations.
For example my node asks your node for a specific calculation that can only be done on gpu to finnish in a timely manner. And if you dont answer in a specific time , i will notify the network that you missed 1 calculation. If you miss more than 100 calculations within a given time, you are out. The number would decrease 1 point per hour.
Everything else is client side and not feasible. I can re-write the code you want to execute or just add a jump in assembler and script that instruction.
Second problem with the bandwidth test is peerings. You get only a good bandwidth with a single TCP stream if the latency to the target is very low. So a bandwidth test would have to be done with at least 30 simulatnous tcp streams.