Это всего лишь предположение, но я бы сказал, что вы, вероятно, предоставили определение равенства, отличное от того, которое используется переводом LINQ в EF. В EF я полагаю, что он использует равенство свойств, тогда как вы можете только проверять, чтобы идентификаторы были одинаковыми. Я предлагаю вам явно закодировать определение равенства, которое вы хотите проверить, в своем выражении LINQ. Причина, по которой ваше определение равенства работает в первом случае, заключается в том, что перечисление IDbSet переносит его в память и, таким образом, вызывает вашу версию Equals, а не LINQ-EF-преобразование Equals.
var historiesToRemove = this.WorkHistories.Where( h => h.Tool.ID == tool.ID )
.ToList();