I am also getting a different number of items on each page when using the /clips endpoint.
These requests return 61, 52, 45 results respectively, in spite of the first=100 parameter.
https://api.twitch.tv/helix/clips?broadcaster_id=423486275&first=100&started_at=2020-02-28T18:24:27Z&ended_at=2020-02-29T14:24:27Z
https://api.twitch.tv/helix/clips?broadcaster_id=423486275&first=100&started_at=2020-02-28T18:24:27Z&ended_at=2020-02-29T14:24:27Z&after=eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6Ik1UQXcifX0
https://api.twitch.tv/helix/clips?broadcaster_id=423486275&first=100&started_at=2020-02-28T18:24:27Z&ended_at=2020-02-29T14:24:27Z&after=eyJiIjpudWxsLCJhIjp7IkN1cnNvciI6Ik1qQXoifX0
Checking the cursor parameter instead of comparing total with first is certainly how it should be done, but the problem is we need to do more requests than expected.