Why doesn't my Custom Pie Menu work after restarting Blender?
You haven't told Blender yet how to load this code on Startup. Two methods are available: 


using the register checkbox you mentioned
turning your code into an Add-on


While the second method might seem more daunting in the beginning, it is the way more flexible way. The first method requires you to rename the Text data block (the tooltip of the register checkbox tells you this) to have a .py extension:



Only when the extension is .py as in the screenshot, registering is available. It then doesn't matter if the Text datablock is a part of the Blend file, or if it is an external text. You can use register and it should load and register when you open a file that contains it. However, that means every time to add that Text datablock to your file, check register, save and reload. It's not exactly nice to work like this.

The Add-on workflow is much more flexible: All you need to do with your code itself is to add an information dictionary that tells Blender hey, I'm an Add-on, offer to load me. It looks like this:

import bpy
from bpy.types import Menu

#    add relevant code to tell Blender that this is an addon
bl_info = {
    "name": "Name of your Addon",
    "author": "Your Name here",
    "version": (1, 0, 0),
    "blender": (2, 75, 0),
    "description": "a more descriptive text of what your addon does",
    "category": "User Interface"
}


This tells Blender what name the Add-on has, who wrote it, where to show it in the Add-on manager, the version of the Add-on and most important the minimum Blender version needed to run it. The rest of your code is identical to what you already had:

#    spawn an edit mode selection pie (run while object is in edit mode to get a valid output)
class VIEW3D_PIE_template(Menu):
    #    label is displayed at the center of the pie menu.
    bl_label = "Beddalls Pie Menu"
    bl_idname = "mesh.beddallpie"

    def draw(self, context):
        layout = self.layout

        pie = layout.menu_pie()
        #    operator_enum will just spread all available options
        #    for the type enum of the operator on the pie
        pie.operator_enum("mesh.select_mode", "type")
        pie.operator("mesh.noise")
        pie.operator("mesh.vertices_smooth")
        pie.operator("transform.vertex_random")


def register():
    bpy.utils.register_class(VIEW3D_PIE_template)

    wm = bpy.context.window_manager
    km = wm.keyconfigs.addon.keymaps.new(name = "Mesh")
    kmi = km.keymap_items.new("wm.call_menu_pie", "E", "PRESS", shift = True, ctrl = True).properties.name = "mesh.beddallpie"


def unregister():
    bpy.utils.unregister_class(VIEW3D_PIE_template)


if __name__ == "__main__":
    register()

    bpy.ops.wm.call_menu_pie(name = "VIEW3D_PIE_template")


When you save this file (again using a .py extension) into your Add-on folder (see the file path locations here: https://docs.blender.org/manual/en/dev/getting_started/installing/configuration/directories.html), you can - after restarting Blender - enable it in the Add-on manager:



after enabling the checkbox, make sure to also click Save User Settings to always have it enabled on startup. Now, when you continue to work on the Add-on, you can edit this .py file directly. After saving, you can hit F8 to ask Blender to reload all Add-ons, or restart Blender.