```python
from typing import List

def order_release_tags(tags: List[str]) -> List[str]:
    def parse_tag(tag: str) -> tuple:
        parts = tag[1:].split('-')
        version_parts = parts[0].split('.')
        major, minor, patch = map(int, version_parts)
        preview_label = None
        if len(parts) > 1:
            preview_label = parts[1].split('.')
            if len(preview_label) == 2:
                preview_label = (preview_label[0], int(preview_label[1]))
            else:
                raise ValueError(f"Invalid preview label: {parts[1]}")
        return major, minor, patch, preview_label

    def compare_tags(tag1: tuple, tag2: tuple) -> int:
        if tag1[:3] < tag2[:3]:
            return -1
        elif tag1[:3] > tag2[:3]:
            return 1
        else:
            if tag1[3] is None and tag2[3] is not None:
                return 1
            elif tag1[3] is not None and tag2[3] is None:
                return -1
            elif tag1[3] is not None and tag2[3] is not None:
                if tag1[3][0] < tag2[3][0]:
                    return -1
                elif tag1[3][0] > tag2[3][0]:
                    return 1
                else:
                    return tag1[3][1] - tag2[3][1]
            else:
                return 0

    parsed_tags = [parse_tag(tag) for tag in tags]
    sorted_tags = sorted(parsed_tags, key=compare_tags)
    return ['v' + '.'.join(map(str, tag[:3])) + ('-' + '.'.join(map(str, tag[3])) if tag[3] is not None else '') for tag in sorted_tags]
```