The first thing that I suspected is a bad cable, so I did try it with several different brand micro USB cables. I tested it with different USB ports, a powered USB hub, then I tested it with another PC. Same behavior in all cases.
Second I suspected that maybe since the board was more recent than the other boards I had been using, I updated the Digilent drivers from the Digilent web site. I even installed the Digilent Adapt 2 app which permits you to program the part without Vivado. But the same flaky behavior was observed.
I took a look at the board under a magnifying glass to see if anything is amiss -- it is tiny with 0201 parts, but it looks fine.
I rebuilt the design (with different pinouts) for the Arty board, following the same programming sequence, and that worked fine on the first try. I regularly work with different FPGA boards, including the Zedboard, the original Zybo, the Zybo Z7-20 and the Arty with no such issues on the same setup so I think the likelihood that something with my installation of Vivado, drivers, or knowledge of FPGAs being the issue is low.
I will test the current draw, but I cannot imagine that exceeding 500 mA would be considered normal for an idle board, especially if it is not driving anything external. The Arty works fine just powered off the USB bus (it has the same Xilinx XC7A35T-1C part).
I'll look into how others resolved this problem, but it seems to look like an issue with the FTDI chip. Unfortunately the Cmod does not have an alternate JTAG pins to bypass the FTDI.