Discovering that after upgrading AX 2012 R3 CU8 to R3 CU10, all reports based on SrsPrintMgmtController (pretty much all form letter documents such as Sales order invoice, packing slip, confirmation, etc.) throw a stack trace as follows.
[c] \Classes\SrsPrintMgmtController\unpack 12
[c] \Classes\xSysLastValue\getLast 29
[c] \Classes\SysOperationController\loadFromSysLastValue 29
[c] \Classes\SrsReportRunController\loadFromSysLastValue 7
[c] \Classes\SysOperationController\getDataContractInfoObjects 10
[c] \Classes\SrsReportRunController\parmReportContract 14
[c] \Classes\SrsPrintMgmtController\init 18
[c] \Classes\SrsPrintMgmtFormLetterController\init 16
[c] \Classes\SrsPrintMgmtFormLetterController\startOperation 12
[c] \Classes\SalesInvoiceController\main 99
[c] \Classes\MenuFunction\run 85
[c] \Forms\CustInvoiceJournal\Designs\DesignList\SalesInvoiceOriginal\Methods\Clicked 46
The problem turns out to be that this class previously did not have pack() or unpack() methods at all. Normally when a class that persists state into SysLastValue changes its #CurrentVersion number, the pack() and unpack() methods are modified to accommodate existing SysLastValue records so that no stack trace occurs. In this case since the class was not previously persisting any state in SysLastValue, it cannot compare the packed state version and throws accordingly.
The easy fix is to delete all SysLastValue records relating to reports with controllers that extend SrsPrintMgmtController. Normally this is not required for a cumulative update (CU) and is only recommended for a major version upgrade, but CU10 seems to be the exception here. I have no identified the individual hotfix responsible for this change, so in theory this problem could surface from as much as a single applied hotfix.
Here is a brief list of common (not exhaustive) classes that extend SrsPrintMgmtController and need their SysLastValue persisted state cleared in CU10.