getResources().getDimension() возвращает значение в пикселях, а setTextSize(float size) по умолчанию трактует значение параметра как число scale-independent pixels, и умножает его на соответствующий коэффициент ещё раз. Используйте версию setTextSize(), в которой можно задавать используемый unit.
tv.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.reader_main_text));