r44497: removed previous attempts to fix the issue.
r44496: In JavaScriptContextSetup.java, moved the partial request conditional inside the <script> tag, so that it only applies to the script contents and the <script> tag is always rendered, whether it's a full or partial request; the end result is avoiding an extra update at the first partial request after the page has been loaded (i.e. updating the 'dynamic-code-compat' node without the <script> tag).
This issue only occurred when the compat jar was in the /lib folder of the app. In particular, the JavaScriptContextSetup event listener indirectly caused this situation. This event listener renders a span with the id 'dynamic-code-compat' and a script tag inside containing all the dynamic scripts. The script tag is only rendered when the request is not a partial request; this causes the 'dynamic-code-compat' node to be updated at the first partial request on the page without the script tag. That update itself (combined with other factors) was causing this issue on IE9. So, the JavaScriptContextSetup event listener was modified to always render the script tag itself, in order to avoid making that extra update, which is a slight performance improvement and avoids this issue with ace:autoCompleteEntry on IE9. It's still not clear how this update could've caused this issue on IE9, as it's very unrelated to the ace:autoCompleteEntry code, but, as we know from experience, IE browsers have their particular idiosyncrasies that make things not work as expected in many cases.
Can be also reproduced with EE-3.3.0-maintenance branch r. 43351 (IE9).