From what I understand, the OS somehow reads every field in the extras even if it doesn’t use them. So when it tries to read your Parcelable class which is not available in the system classpath, it would fail. But if it’s a Bundle (which is a system class) then it works because the system doesn’t try to unparcel the Bundle (a Bundle lazily unparcels its data the first time you try to extract a value from it).
Anyway, it’s better that you pass ids instead of custom Parcelable objects to the AlarmManager in general. The system will need less space to store your alarm data and you’ll be sure that the data you load from the id will be up-to-date.
One final note: when you update an apk from the play store, all alarms will be automatically canceled so you won’t have any problem of mismatching Parcelable classes but you need to reprogram your alarms. If you use a library like WorkManager it does it for you.