This construction is usually followed by が or けれど and means something like "yes, one does X but...". It conveys the meaning that there's a caveat - the statement is true but there's a condition/fact that modifies it meaning, softening it or negating to some extent. It's used to justify your actions ("Yes, it was expensive but I needed it (so I bought it)."), providing an opposing view in a soft way ("Yes, it's nice but it's too dark (so I won't buy it)."), etc.
Don't worry about the fact that the verb or adjective is repeated twice - it's just the way the structure is built.
Note that this structure also exist for な-adjectives: な-adj ことは な2-adjだ.
It's best to understand it based on examples.
It was expensive but... (I liked it so I bought it anyway)
(Yes, ) I laughed but it wasn't really funny.
(It's true) It is convenient but it's too expensive.
(You may think) It is cheap but the quality is poor.
"A Dictionary of Basic Japanese Grammar", page 206. 「ことは」structure's explanation - translated as "indeed one does something alright, (but ~); indeed ~ (but ~); do ~ (but ~)".
"A Dictionary of Intermediate Japanese Grammar", page 205. 「ことは」structure is compared to 「～ないこともない」. It is stated that both structure are used to not give an unconditional statement. The former is used to answer affirmative questions, the latter negative questions.