According the docs: dis_max without tie_breaker, should return same score, but in practice it doesn't happen

Have a look at the output of the query with ?explain and it should explain it. If I had to guess it is either length norms or different statistics on different shards. If you create the index with a single shard and disable norms on the fields, what does it give then? What does ?explain say then?