I know you misunderstood my solution. It addresses the your completely. (detecting if a block is player placed, or generated)
Tree is made out of 20 "original" wood. (i.e; trees that the world generates) Each "original" wood block will drop 1 "normal" wood, and maybe a special drop (sap, bark, etc.) The "normal" wood only drops itself.
Ergo, you would always get 20 wood, but you can’t then take those and break them continuously to farm sap and berries.
You can then take this one step further, and instead of having a different item, you have a flag for each item which denotes if it is original or not. This is harder to implement (Databases, world formats, etc. might need modification), but there should be very little that can go wrong doing it this way, and it will be trivially transferrable to other blocks as well.
This problem is solvable, but the ease of a solution heavily depends on how boundless is coded. Seeing this solution, it is probably just a stop gap measure until they can implement something better.