Edit: This doesn't work because I forgot about discovered checks. However, I think this progress is notable, so I'll leave the answer here.
Repetition is impossible.
First, there obviously cannot be any pawn moves, castling or captures.
Next, I claim that there cannot be any king moves. To prove this, note that a king move can give check only if it is a discovered check. So, in order for a king move to give check, the two kings must be in a line, whether vertical, horizontal, or diagonal. Given the position of one of the kings, the set of squares the other king can be on so that it can give check is the set of squares in the same line with the king and not the same square as the king or the squares next to that square. No two of these squares are adjacent, so the king cannot move from one such square to another in one move. Note that squares A and B are in a line if and only if squares B and A are in a line, so once one of the kings moves, they are no longer in a line, so no further king moves can give check. So, there is at most one king move in the cycle, but if it were a cycle the king would eventually have to move again, so there cannot be any king moves.
Therefore, there cannot be any knight checks, or else the king would have to move or the knight would have to be captured.
Therefore, all moves are moves by pieces, which means they must all block the previous checks.
For any metric on the set of squares of the chessboard, suppose it is true that, for any set of positions for the kings K1 and K2 and any square A which is in some line (vertical, horizontal, or diagonal) with the king, any blocking square B cannot increase the sum of the distances from the square to each of the kings (that is, d(A,K1)+d(A,K2)>=d(B,K1)+d(B,K2)). Then the sum of the distances to each of the squares of the kings must remain constant throughout the cycle.
It is easy to check that the following metrics satisfy that property:
d(A, B)=|row(A)-row(B)|
d(A, B)=|column(A)-column(B)|
d(A, B)=|slope1diagonal(A)-slope1diagonal(B)| (By this I mean number the diagonals that are parallel to the A1H8 diagonal from 1-15)
d(A, B)=|slope-1diagonal(A)-slope-1diagonal(B)| (Same as the previous, but parallel to the other diagonal)
In fact, it is easy to see that, for any of the above metrics, if the blocking square is not within the two parallel lines of those metrics (e.g. for the first metric, within the rectangle with sides made by the rows of each of the kings, and columns the sides of the board), then the sum of the distances will decrease with the next blocking square. Which would be a contradiction, so the blocking squares are restricted to be within each of the bounding parallel lines.
If the two kings are on the same row, column, or diagonal, using the argument from the paragraph above shows that all blocking squares must be in that row, column, or diagonal, clearly impossible.
Therefore, if we view the king positions as two opposite vertices of a rectangle with sides parallel to the sides of the board, by using the first two metrics, all blocking squares must be in or on the bounding rectangle. Using the other two metrics allows us to shrink this to a bounding parallelogram.
Note that the only possible blocking squares are those that are intersections of the rows, columns, and diagonals through each of the squares of the kings because they must give check to the other king and block a check. It is easy to see that there are always 2 possible blocking squares in the bounding parallelogram: the other two vertices of the parallelogram. But then, if we have one checking piece in each (which is necessary), then there are no squares from them to move to to give check, contradiction.