Ok - I found a workaround - create two AlgorithmParameters one with the correct name, and one with the correct body; then init the first one with the body from the 2nd one. Yes, this is really nasty...
Any better way?
/* right name, wrong body; don't init yet
* PBEParamterSpec does not have enough information to initialize this
* object: cipher OID and kdf OID will be missing
*/
AlgorithmParameters realParams = AlgorithmParameters.getInstance("PBES2");
/* wrong name, right body; do initialize
* the provider initializes everything incl. cipher OID
* kdf OID, but stores an incorrect String algorithm
*/
AlgorithmParameters tempParams = AlgorithmParameters.getInstance("PBEWithHmacSHA256AndAES_256");
PBEParameterSpec pbeSpec = new PBEParameterSpec(salt, iterationCount, ivSpec);
tempParams.init(pbeSpec);
/*... invasion of the body snatchers ... initialize with the
correct body */
realParams.init(tempParams.getEncoded());
new EncryptedPrivateKeyInfo(realParams, encryptedData); // profit!!