JsonReader and JsonTreeReader do not have the same behavior while reading a long (or an int) when the next token is a double. JsonReader will fail. JsonTreeReader will cast, it should fail also.
Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateList(IList list, JsonReader reader, JsonArrayContract contract, JsonProperty containerProperty ...