Cuando asignas una medida por programación siempre es en píxeles. Si quieres que sea en DP tendrás que convertirlo con alguna de las múltiples funciones que hay por ahí como tu mismo has dicho.
Igual que si lees una medida después de que se haya ejecutado el onLayout, va siempre en píxeles.
En cuanto a lo de los textos en SP, yo siempre uso DP, salvo para muy contadas ocasiones. Primero hay que comprender la diferencia entre DP y SP.
DP son píxeles de densidad, que como ya sabes hace que si algo ocupa 1px en un ancho de 320px, ocupará 2px en un ancho de 640px.
SP son píxeles de escala, y la escala la marca el tamaño de la fuente del sistema (por eso se aplican a los textos, pero perfectamente podrías aplicarlo a una imagen que actúa como emoticono por ejemplo). Es decir, en este tipo de medida es la fuente del sistema la que determina el tamaño, un usuario que tenga configurado el tamaño Grande verá algo 1.5 veces más grande que alguien que lo tenga configurado como Normal.
Y vuelvo al principio, de cuando yo utilizo DP y cuando SP. Si el Layout tiene un formato tal que está hecho para que las etiquetas estén a una determinada distancia entre sí, y un botón ocupe un determinado tamaño, si usas SP y el usuario configura su móvil como Extra Grande, lo más probable es que el resultado no sea el esperado.
En cambio si usas DP siempre por defecto eso no te ocurrirá, pero si por ejemplo tienes un RecyclerView que contiene un Título y una imagen y al pulsarlo abre una Activity que simplemente contiene un texto multilínea muy largo, si en ese texto usas SP no te desconfigurará nada, y además será en el tamaño de letra que el usuario desea.
Espero que te sirva de ayuda.