As Marty Lederman notes in a comment to my earlier post today, Congress has the power to punish contempts directly, although it hasn't exercised that power in decades. In the 1935 case of Jurney v. McCracken, the Court upheld the Congressional contempt power even when it was exercised after the fact, which is the usual distinction between criminal contempt and civil contempt. So Marty may be technically right that the power is civil in nature, but in substance it's not different from criminal contempt. That in turn suggests that my invocation of the Bill of Attainder Clause is at best technically accurate: Because the contempt is nominally civil, there's no problem under the Bill of Attainder Clause, but the spirit of the Clause is certainly violated by imprisonment after the fact for "civil" contempt of Congress. Could that explain why the practice has fallen into disuse? Or is it possible that notwithstanding the old tradition of Congressional power to prosecute contempts directly, modern understandings of criminal procedure do not permit this practice?
Note that in McCracken, the witness was an attorney who originally refused to comply with a Senate order on grounds of attorney-client privilege. Justice Brandeis justified the upholding of the imprisonment in part on the ground that judicial review would be available. Presumably that would mean that judicial review of a claim of executive privilege would also be available if, say, the Senate were to imprison Karl Rove for contempt without referring the matter to the Justice Department or if the Justice Department declined to prosecute.
From the perspective of separation of powers, direct prosecution by a house of Congress, followed by judicial review, seems the preferable mode of proceeding, as it makes each branch put its money where its mouth is. But it does raise serious due process concerns of the sort addressed by the Bill of Attainder Clause.