I haven't tested this, only code inspection, but createIndexes returns OK if it find all indexes to already exist / be being built. I don't see any code setting the latest optime on the opCtx, so I think we are not going to wait for writeConcern correctly if no writes are done by the operation thread.
Foreground index builds would have been misbehaving, since they could block behind other foreground builds and then see that everything is already built and return without a write.
SERVER-40927, to wait for background index builds to finish before returning, we'll have the same problem as foreground.
This would be a longstanding issue, if it does exist.