How do KLT and SVD differ from each other?
From the direct implementations of the two, SVD and KLT are different since $S$ in SVD is a diagonal matrix, while $C$ in KLT is not. Besides, KLT is originally used to describe a stationary process. In its expansion, an infinite number of basis functions is required to
form a complete set. Yet for a random vector $X$, it can be rephreased in terms of a linear combination of orthonornal basis vectors, then covariance matrix $C$ is furtherly derived.

For a 2D image, we can view it as $M$ realizations of stochastic process $x$ where $M$ is the row of the image. And the assumption is that all rows have the same row covariance matrix $C$, then the KLT can be somehow converted to the form of SVD. In other words, when considering a multivariate stochastic process, the SVD and the KLT are computationally equivalent. That's why in most cases people view the both as the same. For mathematical details, refer to The KL transform and eigenimages.

In the application of image compression, the global KLT is used for the whole image, while SVD is better applied to each block. In Patrick et al's Hybrid KLT-SVD Image Compression, they combined the two method to implement the adaptive transform on the blocks to achieve a better coding efficiency.