Really, I'm not sure, but it feels like JSIL bug that tied to workaround. As initially I was not sure, that it is bug, I haven't filled bug report yet.
Looks like JSIL in translation doesn't box value sometimes. You can check it on AsyncAwait.cs.js (JSIL translation of my new test). Here is disasemlby from dotPeek:
```
this.\u003C\u003Et__builder.AwaitUnsafeOnCompleted<TaskAwaiter, TestClass.\u003CAsyncMethod\u003Ed__2>(ref awaiter, ref this);
this.\u003C\u003Et__builder.AwaitUnsafeOnCompleted<TaskAwaiter, TestClass.\u003CAsyncMethod\u003Ed__2>(ref awaiter, ref this);
```
And here is translation of same lines from JSIL
```
170: this.$builder.AwaitUnsafeOnCompleted$b2($T01(), $thisType)(/* ref */ taskAwaiter, new JSIL.BoxedVariable(this));
184: this.$builder.AwaitUnsafeOnCompleted$b2($T01(), $thisType)(/* ref */ taskAwaiter, /* ref */ this);
```

I don't understand, why JSIL doesn't do boxing on second call.