lol, sad but true.
... Yep, many a time I crash ACad (2005 - 2012) by simply opening a DWG file which was exported from Revit as a 3D model. :ugly: Doesn't matter which acad, Vanilla / ACA. As long as the model is anything worthwhile, acad can't handle it.
Back to your scenario: I think it's due to the vlax-add-cmd which actually turns the lisp defun into an ACad internal command. Now we all know that ALisp is not in the least thread based, but most of ACad's internal commands use some form of threading - especially transaction based. You notice in some cases when making commands in DotNet that you need to use transactions in order to avoid crashes.
This is especially prevalent when there's a lot of user interaction in the command itself. And that loop is thus causing some large quantities of waiting for user input. Perhaps it's due to the way the lisp thread is actually the same thread which is reading any user input. If called normally with a c:defun the lisp runs syncronously, but may be started and stopped when it's an internal command. This might cause the lisp interpreter to fail, have seen this happen in VLIDE while debugging.
Just guessing of course. But, it's an "educated" guess