Running sys.dm_db_index_physical_stats in parallel
sys.dm_db_index_physical_stats 

is a system table valued function.
Internally this will perform an openrowset call to an internal INDEXANALYSIS system data source.
create function [sys].[dm_db_index_physical_stats]
(
    @DatabaseId         SMALLINT        = 0,
    @ObjectId           INT             = 0,
    @IndexId            INT             = -1,
    @PartitionNumber    INT             = 0,
    @Mode               nvarchar(20)    = NULL
)
returns table
as
    return select *
        from OpenRowset
        (   TABLE
            INDEXANALYSIS,
            @DatabaseId,
            @ObjectId,
            @IndexId,
            @PartitionNumber,
            @Mode
        )
GO

More info on these internal data sources here.
You can find the same INDEXANALYSIS TVF call in the execution plan:

And you can also see that it is a multi statement table valued function.

So the query will not be able to use parallelism due to reason #1: system table access

The list changes from version to version, but for example these things
make the whole plan serial on SQL Server 2012:

...

System table access (e.g. reading from sys.tables)



The TVF call will also be serial due to reason #2: Multi statement TVF

These query features are examples that require a serial zone in the

...

Multi-statement T-SQL table-valued functions



Source