So, I assume I need to change my code (many places). Why backward compatibility was broken? This make no sense paying for new version - almost every time I upgrade to newer TC version I encounter some issues (either it is buggy or backward compatibility is in some way broken).
Using the for..in approach is not correct neither in TestComplete 7, nor TestComplete 8. The difference is that in TestComplete 7 no error message was shown. Here is the quote from the MSDN Library article:
The for...in statement cannot loop over the members of non-JScript objects, such as .NET Framework objects.
So, you need to use the method mentioned in the Allen's post.