The javadocs for Index.getMetadataReloadTask() state the following:
Returns a task to reload the internal metadata of an index.
Called when the base table metadata is modified or when the configuration of the Index is updated.
However, altering a table does not result in the reload task being executed. I think the root of the problem is that in SecondaryIndexManager.reloadIndex(), we only execute the reload task when the old IndexMetadata does not equal the current IndexMetadata. Altering the table does not change the index metadata, so this check always fails.
This especially affects per-row secondary indexes, where the index may need to handle columns being added or dropped.