Sift (if lumpy) the cocoa powder into a medium saucepan and stir in the sugar. Slowly whisk in 1 1/2 cups milk until the mixture is smooth. Set on the stove over medium-high heat and bring to a simmer, stirring constantly. Remove from heat and set aside.
In a large bowl, whisk together the remaining 1/2 cup milk, cornstarch, egg yolks, and salt. Stir rapidly while very slowly pouring the hot milk/cocoa powder mixture into the egg yolk mixture. Transfer entire mixture back to the saucepan and set pot over medium-high heat, whisking constantly, until pudding comes to a full boil. Reduce heat to a simmer and continue whisking for a few more minutes until pudding is thick. Remove from heat and mix in melted chocolate chips, butter, and vanilla, stirring until smooth.
Strain pudding through a fine mesh sieve and divide between four (4-ounce) cups or small bowls. Cover each pudding with plastic wrap, ensuring that the plastic is touching the entire surface with no air bubbles (to prevent a skin from forming). Chill until set, for at least 4 hours and up to overnight.
Garnish chilled pudding with fresh whipped cream and chocolate shavings, if desired.