Your idea doesn't work because you can't assume that clocks are synchronized; if anything the current 2 hour window is too short.
The sync was the last block header received. It isn't timestamp based.
Clients will accept blocks with the lower difficulty. However, miners will only build on a lower difficulty block if the previous block was received at least 10 minutes previously. There is no need to have a block time.
Sending out early low difficulty blocks means that acceptance of your block would be delayed by other miners. If they produce a full block they jump over your block anyway, so there is less incentive for them to care.
I think lower difficulty blocks could be defined to set their timestamp relative to the previous block.
So,
50%: prev-timestamp + 10 mins
25%: prev-timestamp + 20 mins
Normal clients wouldn't produce low difficulty blocks until 20 mins after the last block, so the timestamp will effectively increase by 10 mins every 20 mins (or 20 mins every 30 mins).
If you don't require the timestamp to be set 10 minutes ahead of the previous block you've effectively just reduced the time between blocks; mining is a random process so if you find a half-difficulty block why wouldn't you broadcast it to the network?
You have to set the difficulty in the header before you try to mine it.
After 20 mins of no blocks, miners would recompute their header (just change the difficulty field) and continue mining. If they hit a block, then all other miners will accept it since it is at least 20 mins in the future so the other miners will have see the parent more than the 10 min threshold.
If you do require the timestamp miners have every reason to always mine with a timestamp >= 10 minutes ahead of the previous block just in case they find a half-difficulty block.
As above, their is no gain to miners to using different sized blocks. You can mine a 50% block for 50% of the reward.
TX fees need to be handled though.
I think a fee pool might be a way to handle it.
When a block is found:
D = fraction of standard difficulty
P = reward pool total
M = minting reward
T = TX fees in the block
C = coinbase max input
P = P + M*D
C = D*(T + 0.01*P)
P = P + (1-D)*T
In normal situations, the reward pool would get funded by the block reward and then 1% would be withdrawn. In steady state the pool would have 100 times M, so they payout would be equal to the M.
Eventually they'll get close enough to the 2 hour window that network consensus is impacted
That is why it is important that there is no incentive to produce smaller difficulty blocks.
Finally a large miner also has an incentive to mine blocks close together because it increases the orphan rate of their competitors more than it increases the orphan rate for them, thus reducing competition over time, and making available more transactions for them to mine and collect fees from.
If the chain is
A <- B <- C
but C is a 50% difficulty block, then C*, which is full difficulty, will win, even if it is found later.
This means other miners can decide not to mine on low difficulty blocks will low(er) risk.