How do you create embeddings? For example I use GloVe files and my custom code looking like that:
embed_mat = word_vector_loader.create_embedding_matrix('glove.6B.100d.txt', vectorizer.vocabulary.word_to_index, max_idx)

When I then look at an mebedding for a random index value:
print(vectorizer.vocabulary.index_to_word[105]) ==> e.g., for me, "always"
print(embed_mat[105])

I get the same vector as in the file glove.6B.100d.txt. However, the word “always” is obvisouly not in line 105 but in line 691. Maybe this causes some discrepancy in your code. Can you check if your embeddings is correct, e.g., that embeddings[x] is the same as in the file for word idx2word[x] (like x=105 in my example above)
I also set the word embeddings in the model a bit differently, but that shouldn’t make any difference
model.word_embeddings.weight.data.copy_(torch.from_numpy(embed_mat))
model.word_embeddings.weight.requires_grad=False

But yeah, when I have a sentence like “always …” the sequence is [105, …] and X[0][0] after the embedding layers is the vector for “always” in the GloVe file as well as embed_mat[105]. Just for testing, can you set freeze=True? Or do you enforce any normalization in the embedding layer?