have you ever seen sample code with “seemingly inexplicable” stuff like:
timer.performWithDelay(1, someFunctionThatYoudThinkICouldCallRightNowButDont)
you may be falling victim to this “trickier” sort of partially-torn-down-object syndrome.
the reason people use stuff like the timer code above is that not everything in Corona happens “right now”, and in particular display object removal versus its total destruction are not guaranteed to be synchronous. (in fact it’s pretty obvious that display.remove() only removes the object from the display list, leaving its proxy scaffolding in place until some “cleanup routine” occurs at the end of current frame - the process is undocumented, but experimentally testable)
so… if you display.remove() something this frame and attempt to check its properties or call its methods or whatever also in this same frame, you can be fooled into thinking you still have a valid object, when in fact you do not.
and this is exactly the sort of thing, given the proper circumstances, that can work 99% of the time, but with just a tiny bit of “odd timing” (say you’re emitting messages in an enter frame loop, but destroying object based on touch events, or maybe there’s a transition onComplete in there, or a timer, or etc - so that the two might be a frame +/- of each other) you can get that sort of occassional “1%” failure.