During investigation I discovered that it's not possible to fix issue by implement custom RenameProcessor. It happens because all compatible rename processors are triggered in the rename chain. RenameJavaClassProcessor is compatible as well because the only guard that it uses: "PsiElement should be instance of PsiClass", and it renaming the class constructor. The only possible solution without rewriting whole plugin psi-structures is to rename constructor backward after it was renamed.
To be clear: Refactor->Rename File... does NOT change the name of the constructor, but it does change the name of the class (correctly). Refactor->Rename... (Shift+F6), which is a more common operation, exhibits the bug.
Turns out that if you change the class name when the class name is under the cursor, then everything works correctly. However, if the cursor is on a secondary position (e.g. the return type specification for a function), then the constructor's name will be changed.
Also, selecting the name to change as part of a new expression (var a = new Thing();) will NOT change the name of the constructor OR the instance that was under the cursor.
Placing the cursor on the function name new on the constructor and refactoring will change the name of the constructor (so it's not a constructor any more) but does not affect other new expressions that refer to the constructor. (Not sure what correct behavior should be here.)