This seems to be an issue with API 16 and lower. API 17 doesn't include this extra space.
Also the issue doesn't seem specific to Samsung (I was able to reproduce the issue in the emulator).
Here is my workaround, not sure if it is the best, but it solved my problem:
layout.xml
<RadioButton
android:id="@+id/radio_button"
android:layout_width="@dimen/radiobutton_width"
android:layout_height="@dimen/radiobutton_height"
android:padding="0dp"
android:layout_margin="0dp" />
values/dimens.xml
<dimen name="radiobutton_width">38dp</dimen>
<dimen name="radiobutton_height">48dp</dimen>
values-v14/dimens.xml
<dimen name="radiobutton_width">32dp</dimen>
<dimen name="radiobutton_height">42dp</dimen>
values-v17/dimens.xml
<dimen name="radiobutton_width">-2dp</dimen> <!-- WRAP_CONTENT -->
<dimen name="radiobutton_height">-2dp</dimen> <!-- WRAP_CONTENT -->