The engine definitely does destroy all non-global objects when switching layout, so I would say the most likely cause is you accidentally made some objects global.
Still, you can already do a 'destroy all objects' type event by putting a 'destroy' action under a 'pick all instances' event.
I noticed it sometimes doesn't destroy particles already in flight, ie. one-shot spray and rarely, sprites with a short fade out. Not sure why but i never set global for any object.