In case if the task was initialized from the remote client as web console then taskEvent.subjectId() will return the incorrect value.
It will contain the subject id for the node where this task was deployed.
Ignite already have the thread local store for subject id but looks like we have a problem in GridTaskProcessor:
UUID subjId = getThreadContext(TC_SUBJ_ID);
But it always is null because of the correct value for TC_SUBJ_ID stored in
Map<GridTaskThreadContextKey, Object> map = thCtx.get();
So it should be changed to
UUID subjId = (UUID)map.get(TC_SUBJ_ID);