Once I had a WebApp in an App Service Plan (only one). There was some problem with the Aplication, and it was consuming all the CPU of the plan. I then moved the WebApp to another plan. It started to consume all the CPU (~100%) in the new (destination) App Service Plan.
After moving the app, in Azure portal, the original App Service Plan appeared as having "0 apps, 0 slots" (empty), yet the CPU was still around 100%. Weird!
Azure wouldn't let me remove that empty origin App Service Plan, telling me to first remove all the App it contained (which should be none).
I guessed Azure had registered the movement of the WebApp to the destination App Service Plan, yet some process was somehow stuck in the original App Service Plan, and until the process wouldn't end, I wouldn't be able to remove the App Service Plan (hence I would pay for it).
My trick here was to Scale Down that original App Service Plan. It was Premium, and I scaled it down to Free. When you scale up/down, Azure migrate deploys your app on a new set of machines. That is the stuck process would then forcely disappear. No new process was spawned on the new machine, as Azure had no account of any app being deployed on that App Service Plan anyway :)
Once scaled down to Free, I was instantly able to remove the empty plan.
So, in case you have any such problem, scale Up or Down the plan. It will assign new VMs, with no remaining processes nor new app process (as no apps are registred to the empty plan!)