This emphasizes the subtle difference between numpy and Theano, but you can easily work with ease.
Extended indexing can be included in numpy using a list of items or a tuple of items. In Theano, you can only use a tuple of positions.
So changing
X = T.set_subtensor(X[[[0, 1], [0, 1]]], np.array([1, 2]))
to
X = T.set_subtensor(X[([0, 1], [0, 1])], np.array([1, 2]))
solves the problem in Theano.
numpy,
X[[[0, 1], [0, 1]]] = np.array([1, 2])
X[([0, 1], [0, 1])] = np.array([1, 2])