Breaking a block in adventure mode and replacing it directly with a 'canplaceon' tagged block

you'd have to entitydata the resulting item. For that you run the entitydata command on all items without a tag and then tag those items. Here is an example for stone:

/scoreboard players tag @e[type=item,tag=!processed] add stone {Item:{id:"minecraft:stone"}}
/execute @e[type=item,tag=stone] ~ ~ ~ /entitydata @s[type=item,tag=!processed] {Item:{tag:{CanPlaceOn:["minecraft:dirt","minecraft:stone"]}}}
/scoreboard players tag @e[type=item,tag=stone] add processed

this way the resulting item entity will be changed instantly and will have the CanPlaceOn Tag already when the player picks it up.