I’m a little surprised your first attempt didn’t work. If you remove the rankdir statement, the result looks good. Setting rankdir=LR should just take that layout and rotate it 90 degrees. It sounds like a bug.
If you are not just exploring the group attribute and want a dot layout closer to the original, start with your second attempt and
1 Remove the group attributes, most of the compass point attributes, and the hack at the end
2 Add more space using the ranksep and nodesep attributes
3 Set the margin and minimum width of Start to 0
4 Use xlabels for the edges on q0
The items in 1 are not necessary; 2 helps with the flat edges between q0 and q1; 3 removes the space between the Start node and its edge. As for 4, edge labels are implemented as pseudo-nodes. This usually works well, providing the needed space, etc. But sometimes they can cause undesirable artifacts. In your case, you wanted arced edges on q0, but the edge labels caused some of the edges to be line segments. So you added compass points on the edges between q0 and q1, and needed an invisible edge from q0 to q2. Using xlabels causes the edges to be drawn first, often as you want them, and the labels are added afterwards.
The following graph should be close to what you want.
digraph {
ranksep=1;
nodesep=0.5;
node [shape=circle]
Start [margin=0 width=0 shape=plaintext]
q0 [shape = doublecircle label=<<I>q</I><SUB>0</SUB>>]
q1 [label=<<I>q</I><SUB>1</SUB>>]
q2 [label=<<I>q</I><SUB>2</SUB>>]
q3 [label=<<I>q</I><SUB>3</SUB>>]
Start -> q0
q1 -> q0 [xlabel="1"]
q0 -> q1 [xlabel="0"]
q1 -> q3 [label=" 0"]
q3:se -> q3:e [label=" 0,1"]
q2 -> q0 [xlabel="0 "]
q0 -> q2 [xlabel="1 "]
q2 -> q3 [label="1"]
{rank=same; Start; q0; q1}
{rank=same; q2; q3}
}