Some more for Iowa:
Someone mentioned Cedar Falls and Cedar Rapids on the Cedar River. There’s also Iowa Falls and Iowa City on the Iowa River.
Likewise, Rock Rapids and Rock Valley are both found on the Rock River in northwest Iowa, and Rock Falls, Rockford, Marble Rock, and Shell Rock are all along the Shell Rock River.
Northwest Iowa has Sioux City, the smaller Sioux Center, and the even smaller Sioux Rapids.
North Liberty, West Liberty, New Liberty, Liberty Center, and Libertyville. The first three are within 40 miles of each other.
Hampton and New Hampton are both county seats about 50 miles apart.
Dallas Center and Melcher-Dallas are also about 50 miles apart. The latter was a pair of separate neighboring cities that merged in 1986.
Creston and Preston. One letter difference, 215 miles apart.
Pleasant Hill and Pleasantville, which are only about 20 miles apart. And then there’s Mount Pleasant.
Fairfax, Fairbank, and Fairfield can all be found in eastern Iowa, as are Riverdale, Riverside, and River Junction.
Tiffin and Tipton are only about 30 miles apart.
Urbana and Urbandale. Three more letters and about 48,000 more people in the latter.
There are quite a few “Lake” places in Iowa, but only 60 miles of US 71 separate Spirit Lake and Storm Lake.
Edit: I'll add Coralville, a suburb of Iowa City, and Coalville, a bedroom community for Fort Dodge.
And then there are Wilton, Milton, and Welton, all scattered throughout eastern Iowa. Wilton actually called itself Wilton Junction for many years until ZIP codes came along; in 1972 they officially dropped the Junction.
Even more in Iowa (Why are there so many of these?):
Waukee and Waukon. The former is a rapidly-growing Des Moines suburb, and the latter is a county seat in northeast Iowa.
Gilbert and Gilbertville. The former is north of Ames and the latter is southeast of Waterloo.
Beacon and Beaconsfield, both in southern Iowa about 80 miles apart
Atkins and Watkins, only 10 miles apart and in the same county
Chester and West Chester, nowhere near each other
Grundy Center and Guthrie Center, both county seats of their namesake counties
Sidney and Sibley, also both county seats. The former in the SW corner of Iowa and the latter near the NW corner.
Keokuk and Keosauqua, county seats in adjacent counties in southeast Iowa
Eldora, Ladora, and Panora
Clear Lake and Crystal Lake, only 21 miles apart
Oakland and Oakland Acres, over 130 miles apart
Farmersburg and Farmington, near the NE and SE corners of the state, respectively
Sloan and Solon, over 240 miles apart
Springville and Springdale, both in east-central Iowa
Early and Earling, about 50 miles apart in western Iowa
Gilman and Gilmore City
Woodward and Woodbine
Aplington and Arlington
Stockton and Stockport
Stanhope and Stanwood
Lawton and Luton, only 10 miles apart and in the same county
Arion, Elberon, Albion, and Albia
Dows and Dow City
Lone Tree and Lone Rock
Elkhart, Elk Horn, and Elkport
I'd like to dedicate this next section to the county seats in Iowa starting with the letter c. There are way too many of them and there are several that I constantly mix up due to having very similar names, especially the ones in southern Iowa since they're all fairly close together.
Creston and Cresco
Chariton, Clarion, and Clarinda
Corning and Corydon