Candescence, that's not a bug, it's by design since Construct Classic.
The Compare Values condition does not do any picking. It literally works out two numbers and compares them.
It has no idea what you're trying to do, so when you write TestEnemy.X, it just gets the first instance's X co-ordinate, and only ever the first instance's X co-ordinate. So you are actually telling Construct to only compare the distance between the first two instances. It's not a bug.
It's really easy to solve: just put a 'For Each TestEnemy' condition above it and it will repeat the distance measurement for each instance!
If you want to support multiple turrets you should add another for each, i.e.:
+ For Each TestTurret
+ For Each TestEnemy
+ distance(TestTurret.X, TestTurret.Y, TestEnemy.X, TestEnemy.Y) < 300
-> Shoot...
This compares the distance between every combination of enemy and turret. However, with lots of objects, this quickly becomes inefficient.
What you need is the turret behavior, in Construct 2 In Classic, the Turret behavior takes care of all of this for you, and does it very efficiently as well.